达梦数据库的性能优化
- 格式:docx
- 大小:1.36 MB
- 文档页数:11
性能优化之达梦AWR使用篇--作者:张守帅什么是达梦AWR?AWR--Automatic Workload Repository,系统为其所有重要统计信息和负载信息执行一次快照,并将这些快照存储在AWR中。
达梦AWR功能默认是关闭的,如果需要开启,则调用DBMS_WORKLOAD_REPOSITORY. AWR_ SET_INTERVAL过程设置快照的间隔时间。
DBMS_WORKLOAD_REPOSITORY包还负责snapshot(快照)的管理。
怎么使用达梦AWR?在使用DBMS_WORKLOAD_REPOSITORY包之前,需要提前调用系统过程,并设置间隔时间具体使用方法如下:SP_CREATE_SYSTEM_PACKAGES(1);下面语句设置间隔为30分钟,也可以是其他值:CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(30);注意:DM数据库在创建该包时,默认创建一个名为SYSAUX的表空间,对应的数据文件为SYSAWR.DBF,该表空间用于存储该包生成快照的数据。
如果该包被删除,那么SYSAUX表空间也对应地被删除。
CREATE_SNAPSHOT手动创建快照,也可以等待设置的间隔时间后系统自动创建快照,快照id从1开始递增:手动创建快照:DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();查看创建的快照信息,包括快照id:SELECT * FROM SYS.WRM$_SNAPSHOT;把snapshot的id在1~2范围内的AWR分析报告生成到/home/dmdba/awr1.html文件。
SYS.AWR_REPORT_HTML(1,2,'/home/dmdba','AWR1.HTML');AWR内容LoadprofileTop5MainReport和Wait Events Statistics报告一下内容,省略……到这里相信熟悉OracleAWR报告的用户,你懂了。
达梦数据库介绍(一)引言概述:达梦数据库是中国的一种数据库管理系统,由达梦软件有限公司开发。
它是一款高性能、高可用性的数据库系统,被广泛应用于金融、电信、政府机构等行业。
本文将介绍达梦数据库的基本信息、特点以及其在各个领域的应用。
正文内容:1. 达梦数据库的基本信息- 发展历史:达梦数据库起源于上世纪90年代,经过多年的发展和成熟,已成为中国重要的数据库厂商之一。
- 数据模型:达梦数据库采用关系模型,支持SQL语言。
- 数据结构:以表格形式存储数据,具有完整的数据类型和约束支持。
- 支持平台:达梦数据库在多个操作系统平台上都有支持,包括Windows、Linux和Unix。
2. 达梦数据库的特点- 高性能:达梦数据库采用了先进的查询优化技术,可以快速处理大量的数据请求。
- 高可用性:达梦数据库具有故障切换和自动恢复功能,可以在系统故障时迅速切换到备份服务器。
- 安全性:达梦数据库提供了完善的安全机制,包括用户认证、权限管理等,以保护数据的机密性和完整性。
- 扩展性:达梦数据库支持分布式存储和水平扩展,可以满足不断增长的数据需求。
- 数据备份和恢复:达梦数据库提供了完备的备份和恢复机制,保障数据的安全性和可靠性。
3. 达梦数据库在金融行业的应用- 金融交易处理:达梦数据库可以快速处理金融交易数据,保证交易的实时性和准确性。
- 风险管理:达梦数据库提供了丰富的统计和分析功能,可以帮助金融机构进行风险管理和预测。
- 客户管理:达梦数据库可以存储和管理大量客户数据,帮助金融机构提供更好的客户服务。
- 合规性:达梦数据库具有强大的数据安全功能,可以满足金融行业的合规要求。
4. 达梦数据库在电信行业的应用- 用户管理:达梦数据库可以存储和管理海量用户数据,处理用户的认证、授权等操作。
- 信令处理:达梦数据库的高性能和可扩展性,可以处理电信网络中的大量信令数据。
- 在线账单生成:达梦数据库可以生成电信用户的在线账单,提供便捷的账务管理功能。
达梦执行计划的选择与优化思路1. 理解执行计划:执行计划是数据库系统为了完成某一查询任务而制定的一系列操作步骤。
理解执行计划有助于我们找出查询性能瓶颈,从而进行针对性的优化。
2. 选择合适的连接方式:在达梦数据库中,连接可以分为嵌套循环连接(Nested Loop Join)和哈希连接(Hash Join)两种。
通常情况下,哈希连接的性能要优于嵌套循环连接。
因此,在编写SQL 语句时,尽量使用哈希连接来提高查询性能。
3. 使用索引:索引是提高查询性能的关键。
在达梦数据库中,可以通过创建索引、修改索引等方式来优化查询性能。
需要注意的是,索引并非越多越好,过多的索引会影响数据的插入、更新和删除操作,从而降低数据库性能。
4. 优化子查询:子查询是指在一个查询语句中嵌套另一个查询语句。
子查询的性能通常较差,因此需要尽量避免使用子查询。
如果必须使用子查询,可以尝试将子查询改为关联查询或者使用临时表等方法来提高性能。
5. 减少数据传输量:在达梦数据库中,可以通过减少数据传输量来提高查询性能。
例如,可以使用分页查询、只返回需要的列等方法来减少数据传输量。
6. 调整参数设置:达梦数据库提供了一些参数设置,可以根据实际情况进行调整以提高查询性能。
例如,可以调整内存分配、并行度等参数。
7. 分析执行计划:通过分析执行计划,可以找出查询性能瓶颈,从而进行针对性的优化。
在达梦数据库中,可以使用EXPLAIN命令来查看执行计划。
8. 监控和调优:在实际使用过程中,需要定期监控数据库性能,并根据监控结果进行调优。
可以使用达梦数据库提供的性能监控工具来进行监控和调优。
达梦数据库实训总结达梦数据库是一种高性能、高可用、高安全的数据库管理系统。
在数据库实训中,我对达梦数据库进行了深入学习和实践,并取得了一些成果和收获。
在实训中,我了解到达梦数据库具有很高的性能优势。
它采用了多种优化技术,如智能查询优化器、高效索引机制等,可以大大提升查询和处理数据的效率。
在实践中,我通过编写和执行各种复杂的SQL语句,测试了达梦数据库的性能表现,发现其处理大规模数据和复杂查询的能力非常强大。
达梦数据库还具有高可用性。
它采用了主备复制机制,可以实现数据库的实时备份和快速切换,保证了系统的高可用性和数据的安全性。
在实训中,我学习了数据库的备份和恢复操作,并通过模拟故障和恢复的实验,验证了达梦数据库的高可用性和数据完整性。
达梦数据库还注重数据的安全性。
它提供了多种安全机制,如访问控制、权限管理、数据加密等,可以有效保护敏感数据的安全。
在实践中,我学习了数据库的用户管理和权限控制,了解了如何设置用户角色和权限,并通过实验验证了达梦数据库的安全性能。
达梦数据库还具有较好的扩展性和兼容性。
它支持分布式部署和集群架构,可以方便地扩展数据库的性能和容量。
同时,达梦数据库也具有较好的兼容性,可以与其他数据库进行数据迁移和交互。
在实训中,我学习了数据库的集群部署和配置,了解了如何实现数据库的横向扩展和负载均衡,并通过实验验证了达梦数据库的扩展性和兼容性。
总的来说,在达梦数据库的实训中,我对数据库的基本原理和操作有了更深入的了解,掌握了数据库的设计、管理和优化技巧。
通过实践,我发现达梦数据库具有很高的性能、可用性、安全性和扩展性,适用于各种规模和复杂性的应用场景。
在未来的工作中,我将继续深入研究和应用达梦数据库,为企业的数据管理和应用提供更好的支持和服务。
提高达梦数据库空间使用率方法【导语】达梦数据库是我国自主研发的一款高性能数据库产品,有效管理和优化其空间使用率,对于保障数据库性能、降低运维成本具有重要意义。
本文将详细介绍几种提高达梦数据库空间使用率的方法,帮助您更高效地使用数据库资源。
一、定期进行空间回收1.利用达梦数据库提供的回收功能,定期对不再使用的空间进行回收。
例如,对于已删除的数据,可以通过回收空间操作将其所占用的存储空间释放,提高空间使用率。
2.回收空间时,注意选择合适的回收策略,如全量回收、增量回收等,以满足不同场景的需求。
二、优化表空间管理1.合理规划表空间,根据业务特点将不同类型的数据存储在不同的表空间中,便于管理和优化。
2.控制表空间的自动扩展,避免无限制地扩展表空间导致空间浪费。
3.对于不再使用的表空间,可以将其删除或将其数据迁移到其他表空间,以释放空间。
三、压缩数据1.对数据进行压缩,可以显著降低数据占用的存储空间。
达梦数据库支持多种压缩算法,如LZ77、LZ78等,可以根据数据特点选择合适的压缩算法。
2.在创建表时,可以指定数据压缩选项,对数据进行实时压缩。
3.对于已存在的数据,可以通过数据迁移工具进行数据压缩,提高空间使用率。
四、使用分区表1.对于大型数据表,可以采用分区表的方式,将数据分散存储在多个分区中。
2.分区表可以降低单个数据文件的大小,提高空间使用率。
3.根据业务需求,合理划分分区键,使得数据分布更加均匀,降低空间浪费。
五、优化索引1.索引可以加快数据查询速度,但过多的索引会占用大量存储空间。
因此,合理创建索引至关重要。
2.定期审查索引的使用情况,对于不再使用或冗余的索引,可以删除或修改。
3.考虑使用函数索引、组合索引等优化索引策略,提高索引空间使用率。
六、监控和调整1.定期监控数据库空间使用情况,了解空间占用较高的表、索引等对象。
2.根据监控结果,调整数据库参数、优化数据存储结构,进一步提高空间使用率。
通过以上方法,可以有效提高达梦数据库的空间使用率,为业务发展提供稳定、高效的数据库支持。
华中科技大学硕士学位论文摘要数据抽取转换装载(ETL)是数据仓库的核心组成部分,负责从异构的数据源中抽取数据,对这些数据进行清洗、转化,并最终加载到数据仓库当中去。
ETL平台开发和设计的好坏直接影响了数据仓库的构建乃至整个商业智能系统的应用。
因此,对达梦数据交换平台(DMETL)进行改进以提高产品的指标具有重要意义。
在深入研究和分析了达梦数据交换平台的工作原理和机制以及该平台在设计和实现中所涉及的关键技术的基础上,找出了现有达梦数据交换平台存在的不足和缺陷,提出了两种改进方法。
其一:考虑到原有DMETL的串行工作方式不利于发挥系统的功效,将流水线技术引入到达梦数据交换平台之中。
流水线的工作方式实质上是利用多线程和缓存技术,使得ETL数据的抽取,转换和加载三个环节的执行可以抽象成流水线一样运行在不同的线程实例中,从而减少了中间环节的等待时间。
通过流水线工作方式充分的利用了计算机资源,提高了系统的吞吐率,提升了ETL 的工作效率。
第二,针对原有DMETL增量抽取方式对客户系统进行未授权操作所带来的弊端,同时考虑到实际项目中ORACLE作为数据源的应用较多,设计和实现了针对ORACLE数据源的基于日志分析的增量数据抽取方式。
利用ORACLE数据库自身的日志分析工具LOG MINER,对数据库日志文件进行解析,获取用户对数据库的变更操作。
通过分析数据库的变更操作来对数据库中的增量数据进行捕获。
该方法可以有效降低DMETL对客户系统的影响。
通过实验表明,流水线技术的引入是可以在一定程度上提高达梦数据交换平台的工作效率的,并且基于日志分析的增量捕获方式也是可以避免对客户业务系统的侵入。
此外,这项工作对达梦数据库开发并提供其数据库日志分析工具也有参考价值。
关键词:数据仓库,数据抽取转换加载,流水线,增量数据抽取,日志分析华中科技大学硕士学位论文AbstractETL is the core component of Data Warehouse, extracting data from heterogeneous sources, cleaning and transforming the data, finally loading them into Data Warehouse. The good or bad work of ETL development and design directly influences the construction of Data Warehouse and the application of the whole Business Intelligence system. Therefore, it is of great significance that we make a further improvement on the indicators of Dameng Interchange Platform.Based on in-depth study and analysis on the principle and mechanism of Dameng Data Interchange Platform, and also the key technologies involved, we found out some shortcomings and deficiencies existing in current platform. So, two improved methods were put forward. One, considering the serial working way of current platform against efficacy, so we introduced the pipeline technology into the platform.In fact, pipeline technology is essentially implemented by multi-threading and caching techniques, which can control data extraction, data transformation and data loading run synchronously in three different thread instances, working as abstract as pipeline in order to reduce the latency time for the intermediate links. Through this technology, we can make a full use of CPU resources to improve the system throughput rate, and to promote the ETL work efficiency.The other one, given the common problem all the extraction ways of current platform must confront to: the unauthorized access to the customer system. Moreover, taking into account that many Oracle data source were frequently used in the actual project.Therefore, we designed and implemented one extraction way based on analyzing log file to obtain the incremental data. We analyze the log file of database obtained by LOG MINER, one product of log file analysis provided by Oracle Database, to capture the changes to database, which were recorded in log file. Analyzing the change operations to the database, we can capture the incremental data. In this way, the influence of DMETL on client system can be effectively reduced.Finally, experiments we conduct show that the introduction of pipelining can improve to some extent Dameng Data Interchange Platform more efficient; and the way based on log analysis to capture the incremental data can also avoid the intrusion to business systems.华中科技大学硕士学位论文In addition, our work on the research above may play an important role to promoting the development of log analysis kits supplied by the database products.Key words:Data Warehouse, ETL, pipeline, incremental data extraction, log analysis独创性声明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。
1.3适用业务场景
当某表数据量很大,同时历史数据或不常访问的数据占很大部分,最新或热点数据占的比例较小时,可以根据查询最新或热点数据的条件对表分区。
例如对于日志记录类型的数据而言,最近一段时间的数据才是经常查询的热点数据,可以根据日志记录时间按月份对其分区。
在根据时间查询日志数据时,可以局限于对时间范围所对应的分区进行查询,避免全表扫描。
采用分区表后更易管理,针对单个分区表的删除、备份和恢复会更有效率。
例如为了防止日志记录表数据量过大,数据
①建立2张表,其中TABLE_2按月分区,建表语句如下:
②调用存储过程,批量生成1亿条模拟数据,并存到TABLE_1中,存储过程语句如下:
③使用达梦数据库迁移工具,将TABLE_1数据迁移到水平分区表TABLE_2中,确保2张表数据完全一致。
④分别查询2张表的1min内的数据,并记录查询响应时间。
图1不跨分区查询表1
图2不跨分区查询表2
图3跨分区查询表1
图4跨分区查询表2
通过分析执行时间,可以看出耗时最长的执行步骤是表的扫描,占整个查询响应时间的98%以上。
在不跨分区查询情况下,CSCN2聚集索引扫描耗时项TABLE_1耗时基本是。
达梦数据库的性能优化
【技术内容】
一、基础概念
1、达梦数据库概念
2、性能优化概念
性能优化(Performance Tuning)是指为提高系统性能,按照一定的规则和技术,对给定系统进行配置或修改,以达到压缩资源消耗、降低时间消耗和增强可用性的作用。
二、达梦数据库性能优化
1、SQL优化
(1)改进SQL查询
优化SQL语句的结构,把复杂的SQL语句拆分,改进SQL查询可以提高性能。
在使用视图、联合查询、子查询、分组函数时,只有当条件必须要求计算所有记录时,才需要在查询中使用该类函数,应把这些函数放在查询语句结尾处,以减少计算量。
(2)避免慢查询
2、索引优化
(1)创建合理的索引
适当的索引可以大大提高查询性能。
正确映射索引可以帮助您平衡查找数据的性能和存储空间。
达梦数据库的XQuery查询优化XML(eXtensible Markup Language可扩展标记语言)数据的自我描述性使其具有高度的结构化,良好的存储格式等特点,而且XML文档和HTML一样便于网络传输。
因此,XML被广泛应用而成为数据定义,数据交换和数据共享的主要标准。
目前XML 数据库主要研究的方向分为两大块,一是Native XML数据库系统,也称原生或纯XML数据库,如Tamino、Ipedo等;二是XML-enabled 数据库系统,即在已有的关系数据库系统或面向对象数据库系统的基础上扩充对XML的支持,这种数据库的优点在于可以充分利用已有的非常成熟的关系数据库技术。
在关系数据库系统上扩展对XML支持的一个重要部分就是实现XQuery查询。
达梦关公司的DM XML支持项目是以达梦关系数据库为平台,扩展了对XML的支持,研究和实现基于关系数据库XQuery查询优化技术,实现了高效的XQuery查询。
XQuery相关概念XQuery是XML的查询语言,XQuery与XML文档的关系相当与SQL与关系数据的关系。
与XQuery 紧密相关的一个概念是XPath,他们都是W3C的推荐规范。
XPath是XML文档的路径语言,用来在XML 文档中对文档数据进行寻址。
XQuery是XPath的扩展。
目前这两个规范的最新版本是XPath 2.0和XQuery 1.0,前者是后者的严格句法子集,并已成为推荐标准。
XPath表达式通过若干“路径步”在XML文档中进行定位(navigate)。
对于每一步(step),一个“轴”(axes)用来描述本步中的中间结果森林所包含文档节点(以及这些节点的子树),XPath表达式中包含13种轴,其中通常使用的children和descendant-or-self轴缩写为/ 和// 。
FLWOR表达式是XQuery对XPath的重要扩展之一,即for,let,where,order,return表达式的组合。
达梦数据库管理系统DM8(一)引言概述:达梦数据库管理系统DM8是一款高性能、高可靠性的数据库管理系统,具有强大的数据处理和管理功能。
本文将介绍DM8的五个主要特点,包括数据安全性、性能优化、高可用性、灵活扩展性和易用性。
正文:一、数据安全性1. 数据加密:DM8支持数据加密技术,可以对敏感数据进行加密,保障数据的机密性。
2. 角色权限管理:DM8提供全面的角色权限管理功能,可以通过细粒度的权限控制,确保数据得到合适的访问和操作。
3. 审计功能:DM8具备完善的审计功能,可以记录数据库的操作日志和安全事件,便于追踪和分析。
4. 备份与恢复:DM8支持灵活的备份与恢复策略,可以保障数据的安全性和可靠性。
5. 高可用性:DM8支持主备模式和多活模式,提供高可用的数据库解决方案,确保系统的稳定性和持续可用性。
二、性能优化1. 查询优化:DM8拥有强大的查询优化器,可以通过优化查询计划和索引设计,提升查询性能。
2. 内存管理:DM8采用高效的内存管理技术,可以充分利用系统资源,提高数据库的运行效率。
3. 并发控制:DM8支持乐观并发控制和悲观并发控制,确保数据库在高并发情况下的性能和稳定性。
4. 多线程处理:DM8具备多线程处理能力,能够有效地提升数据处理和计算能力。
5. 缓存机制:DM8通过缓存机制,可以减少对磁盘的访问,加快数据的读写速度。
三、高可用性1. 主备模式:DM8支持主备模式,提供了数据库故障切换和自动故障恢复的能力,确保系统的高可用性。
2. 多活模式:DM8支持多活模式,可以实现异地多活,提供更高的系统可用性和容灾能力。
3. 快速恢复:DM8具备快速恢复能力,可以在数据库故障后快速恢复数据和服务。
4. 容错处理:DM8提供容错处理机制,通过数据冗余和故障自动切换,保障数据的安全性和完整性。
5. 监控和告警:DM8集成了完善的系统监控和告警功能,能够及时报警并采取措施,确保系统的稳定运行。
达梦数据库的性能优化“棱镜门”、“微软XP系统停摆”的接踵而至给我国信息安全敲响了警钟,也加速了国内“去IOE”运动的进程。
达梦数据库作为连续5年国产数据库市场占有率第一的高性能、高可靠性、高安全性、高兼容性大型关系型数据库管理系统,已成功替代了Oracle,在电力、金融、电子政务、教育等行业领域得到了广泛的应用,逐渐成为国家信息化建设的重要基础平台。
为了更好地支撑业务应用,有效管理和利用信息时代不断产生并急剧膨胀的数据,对达梦数据库的优化显得尤为重要。
一、数据库参数优化1.优化内存➢公共内存池公共内存池提供了一组内存申请/释放接口,为系统中需要动态分配内存的模块提供服务。
MEMORY_POOL决定了以M为单位的公共内存池的大小,上例中40M;N_MEM_POOLS决定把内存池划分为几个独立的单元,以减少并发访问的冲突,提升并发效率;MEMORY_BAK_POOL表示系统保留的备用内存量,当常规的内存申请都失败时,从这个备用内存里分配,然后在上层模块中进行必要的容错处理。
可以在v$sysstat中查看当前公用内存池的使用情况:这里的STAT_VAL给出的是已经使用的字节数。
正常情况下,应该小于配置的池大小,否则系统不得不从池外向操作系统申请/释放内存,造成效率低下,并可能把操作系统的内存搞得很零碎。
➢系统缓冲区BUFFER为了加速数据访问,系统开辟了一个缓冲区,使用LRU算法存放经常访问的数据页,逐步淘汰不用的数据页。
使用下列参数,可配置基本的系统缓冲区的大小:其中HUGE_BUFFER 是专门用于列存表的缓存区,BUFFER是用户行存表的系统缓冲区。
BUFFER表示初始的系统缓冲区大小,单位为M。
通常情况下,如果物理数据量大于物理内存,则应该把BUFFER调到物理内存的三分之二比较合适。
当BUFFER_POOLS = 1时,系统支持缓冲区的自动扩展。
MAX_BUFFER表示最多能扩到多大。
在自动扩展后,如果系统的压力在一段时间内比较低,系统又会自动收缩缓冲区。
系统缓冲区是一个共享资源,受一个mutex保护,在一个时间点,只允许一个线程可以持有这个资源。
在高并发情况下,这个限制将极大降低并发效率,因此,可以配置BUFFER_POOLS把一个大的系统缓冲区分割为多个小的部分,每一个小的部分作为临界资源,这样只要所访问的数据页不在同一个子池里,就不会发生冲突,从而提升并发性能。
注意,如果配置了BUFFER_POOLS > 1, 则MAX_BUFFER参数就失效了,最大可用的缓冲区由BUFFER参数决定。
➢系统缓冲区RECYCLE这是DM新引入的缓冲区,专门用于缓冲临时表空间。
RECYCLE的淘汰算法与BUFFER完全一样,但是它有独立的HASH表, LRU和更新链。
引入 RECYCLE的目的是防止某些复杂查询的中间结果挤占大量的BUFFER空间,降低BUFFER的命中率,从而增加额外的 IO操作。
使用RECYCLE的场景主要有:◆大表的散列连接,在内存达到HJ_BUF_SIZE时使用◆排序,大数据量的排序操作,◆蓄水池操作符,如:NTTS, SPL, HTAB等,这些操作符需要把数据收集在一起◆临时表数据◆MAL系统中,堆积的邮件◆并行查询中,堆积的消息◆大字段的临时数据RECYCLE的配置可以从V$DM_INI查到,单位M2.利用缓存DM的缓存机制,可以避免系统重复的SQL解析工作,比如对于非常耗时的SQL语句解析,极大提升系统性能。
SQL缓存池的大小用CACHE_POOL_SIZE来设置,缺省为10M。
如果应用程序对SQL语句都是先准备,再绑定参数,然后反复执行,那么就不需要计划缓存了。
在这样理想的模式下,每一种SQL语句都使用不同的语句句柄,并在应用程序启动之后不久就进行了准备,执行时使用相应的语句句柄,并给定不同的参数。
但是这个理想模式要求有良好的应用设计,有限或很少的SQL 语句形式,限制太多。
因此DM数据库系统提供了计划缓存机制。
计划缓存由USE_PLN_POOL参数控制,当USE_PLN_POOL = 0,禁止计划缓存;当USE_PLN_POOL = 1,SQL语句需要完全匹配,才能使用计划。
比如:虽然这两个语句很相似,计划也基本上一样,但是因为常量不同,不能重用计划。
因此使用精确匹配,会造成大量类似重复的计划。
精确匹配一般应该使用在语句非常复杂,查询很耗时的分析型场景。
这类场景语句中,常量取值的不同对计划的影响很大。
当USE_PLN_POOL = 2时,使用模糊匹配模式。
系统首先试图做精确匹配,如果没有找到合适的计划,则需要做语法分析,把常量提取出来,把语句转换为参数的形式,再从计划缓存中查找合适的计划。
如果找到,则提取该计划运行,否则就需要做关系变换和代价分析,并把新生成的计划放入缓存中。
模糊匹配适用于大部分OLTP应用,但是系统还是需要做一遍语法分析,需要把常量分解出来,并重新把语法树反拼成一个字符串,这个过程还把多余空格,注释去掉,因此,下列两个语句都匹配成同一个计划:二、SQL优化1.定位慢的SQL要分析性能瓶颈,首先得把执行的又慢、又多的SQL语句找出来,DM提供了SQL日志的功能,可以将系统中运行的SQL语句、语句绑定的参数、SQL执行时间记录到SQL日志文件中,并提供参数来进行过滤,比如只更新select语句、DELETE语句、update语句、报错的语句等等。
1)修改dm.ini文件#SVR_LOG_FILE_NUM:1表示不切换,2表示记录两个日志文件,互相切换#SQL_LOG_MASK:要记录的语句类型掩码,1表示全部记录4:7表示记录update和select语句#SVR_LOG_SWITCH_COUN:每个SQL日志文件中记录的消息条数#修改完成后需要重启数据库服务2)执行系统存储过程开启志文件中找到性能瓶颈呢?给大家提供一个SQL日志分析小工具(/forum.php?mod=viewthread&tid=44187&extra=page%3D1)Dmlog_DM7_v3.2.jar分析完成后,会在分析程序所在目录生成一个文件夹,保存分析结果:详细的分析结果保存到一个excel文件中2.优化慢的SQL既然我们已经把执行的又慢又多的SQL语句找到了,就马上开始SQL优化之旅吧。
SQL优化首先我们得会看SQL的执行计划,DM中查看SQL执行计划非常简单,在SQL的前面加EXPLAIN关键字即可,如下:另外,我们还需知道DM中如何找到SQL执行计划中各操作符的实际执行时间,如果知道了计划中各操作符的实际执行时间,那么我们就可以对慢的操作符进行针对性的优化。
➢首先我们需要修改dm.ini,修改一个参数,记录SQL执行时各操作符的实际执行时间,修改完成后需要重启数据库服务才能生效。
➢然后我们创建一个存储过程,查询一些动态性能视图,获取我们需要的信息:create or replace procedure sql_et(eid int)isbeginselectname as "OP",time_used/1000|| 'ms'as "TIME",cast(time_used * 100.0/sum(time_used)over()as dec(10,2)) || '%'as "PERCENT",rank()over(order by time_used desc)as "RANK" ,seq_no as "SEQ"fromv$sql_node_history a,v$sql_node_name bwherea.type$ =b.type$and exec_id = eidorder bytime_used desc;➢准备工作做完了,下面我们就构造一个简单的例子来实际操作一下。
--创建表Create table tx(id int, name varchar(100));Create table ty(id int, name varchar(100));--Create index txl01 on tx(id);--Create index tyl01 on ty(id);--创建存储过程Create or replace procedure ins_p(cnt int)asDeclareX int;BeginFor x in 1 .. cnt loopInsert into tx values(x,'hello');Insert into ty values(x,'world');End loop;Commit;End;--每个表插入100万数据call ins_p(1000000);--分析一下下面这个相关子查询select * from tx awhereexists(select * from tx b where a.id = b.id and = andb.ID <= 10)1.执行一下这个SQL语句,记录下他的执行号3304:2.查看其执行计划:3.使用SQL_ET存储过程查看该SQL各操作符的执行时间:--从操作符的执行时间可以看出:时间主要消耗在对TX表和TY表的全表扫描上了,我们有针对性的创建两个索引,将全表扫描转化为索引扫描即可。
Create index txl01 on tx(id);Create index tyl01 on ty(id);--创建索引后,我们再来看看执行计划:--再来看这个SQL各操作符的执行时间三、应用优化1.会话管理在SQL SERVER数据库中鼓励开发人员每执行一个SQL就创建一个会话,这样能够提高性能,但在DM和ORACLE中这种应用的会话管理在性能上就是一个灾难,DM中一个会话足够能干,不需要为每一个SQL创建一个会话来执行,移植类似的SQL SERVER的应用需要注意。
2.索引优化索引对数据库I/O的影响十分巨大。
如果通过索引来访问数据库,可以大大减少对大型表的全表扫描,从而减少I/O的开销。
索引的使用通常能够提高SELECT,UPDATE以及DELETE语句的性能,但会降低INSERT语句的性能,因此索引并非是越多越好,使用索引应该遵循以下原则:●仅当要通过索引访问表中很少的一部分行(1%~20%)●如果要处理表中的多行,而且可以使用索引而不用表不能利用索引的场合:●索引列上有函数(确定性的函数可以创建函数索引)●索引列存在隐式类型转换●索引列选择率差,不如全表扫描3.仅查询需要的列很多没有经验的程序员为了贪图一时的方便喜欢使用SELECT * 来查询,这样实际上会带来很多额外的网络、IO开销,严重的时候会引发灾难。