SQL Query Performance Tuning_4215_Ch01_FINAL
sql tuning advisor 使用方法和详细介绍
SQL Tuning Advisor是Oracle数据库自带的一个SQL优化工具,它可以帮助我们诊断、分析和优化SQL语句的性能问题。
以下是使用SQL Tuning Advisor的主要步骤:
1. 建立tunning task
首先,您需要创建一个tuning task以开始分析过程。
在Oracle中,可以使用`CREATE TABLE`和`GRANT`等命令来完成此任务。
例如,您可以通过创建测试表以及索引来开始任务,或者通过授予特定用户(如`SYSDBA`)的权限来启动任务。
2. 执行task
一旦建立了tuning task,就可以开始执行它了。
执行的过程可能需要一些时间,具体取决于您数据库的大小和复杂性。
3. 显示tunning 结果
当任务完成后,SQL Tuning Advisor会显示关于您的SQL语句性能的分析结果。
这些结果会指出可能的性能问题,并给出相应的解决建议。
4. 根据建议来运行相应的调优方法
最后一步是根据SQL Tuning Advisor给出的建议来运行相应的调优方法。
这些调优方法可能包括修改SQL语句的结构,添加或删除索引,或者对数据库进行其他配置更改等。
总的来说,SQL Tuning Advisor是一个强大的工具,可以帮助数据库管理员优化他们的SQL语句性能。
但是,它只是诊断和优化性能问题的一种工具,并不能解决所有的性能问题。
因此,在使用SQL Tuning Advisor的同时,还需要其他的技术和经验来维护和优化数据库的性
能。
MySQL常见性能问题的排查与解决技巧
MySQL常见性能问题的排查与解决技巧MySQL是一种常用的关系型数据库管理系统,用于存储和管理大量数据。
然而,随着数据量的增加和并发访问的增加,MySQL数据库可能遇到性能问题。
本文将讨论常见的MySQL性能问题,并提供排查和解决这些问题的技巧。
一、慢查询问题慢查询是指执行时间较长的SQL语句,影响系统的响应速度。
慢查询可能由于以下原因引起:1.索引问题:缺乏合适的索引或使用了不当的索引,导致查询效率低下。
解决方法是分析查询语句并创建合适的索引,或者优化现有索引。
2.复杂查询语句:复杂的联表查询、子查询或嵌套查询可能导致慢查询。
解决方法是优化查询语句,尽量减少不必要的联表操作和子查询。
3.锁问题:当多个并发用户查询同一个表时,可能发生锁等待,导致查询变慢。
解决方法是优化锁的使用,例如使用合理的事务隔离级别,或者通过调整锁粒度减少锁冲突。
二、连接问题连接问题是指MySQL无法处理大量并发连接请求,导致系统响应变慢或无法响应。
常见的连接问题包括:1.连接数限制:MySQL默认有最大连接数限制,当连接数达到上限时,会导致新的连接被拒绝。
解决方法是增加最大连接数配置或者优化应用程序的连接管理,尽量复用连接。
2.连接超时:当连接空闲时间较长时,可能会由于超时被断开,导致应用程序重新建立连接,造成性能损失。
解决方法是调整连接超时参数,确保连接时间合理。
3.连接泄漏:应用程序在使用完数据库连接后没有及时释放,导致连接资源被浪费。
解决方法是及时释放连接,或者使用连接池管理连接。
三、内存问题内存问题是指MySQL使用的内存资源不足或使用不当,导致系统性能下降。
常见的内存问题包括:1.内存配置不当:MySQL的内存分配参数设置不合理,导致内存不足或浪费。
解决方法是根据系统的实际情况调整内存参数,例如缓冲池大小、连接内存等。
2.内存泄漏:MySQL在运行过程中可能出现内存泄漏问题,导致内存占用逐渐增加。
解决方法是定期监控内存占用情况,及时重启MySQL以释放内存。
mysql 慢sql参数
mysql 慢sql参数MySQL是一种常用的关系型数据库管理系统,它的慢SQL查询是指执行时间较长的SQL语句。
在实际应用中,慢SQL查询可能会影响系统的性能和响应速度,因此需要根据实际情况来调整相关参数以优化查询性能。
一、什么是慢SQL查询慢SQL查询是指执行时间较长的SQL语句。
执行时间过长可能会导致系统响应变慢,甚至出现阻塞现象。
针对慢SQL查询,我们可以通过优化SQL语句、调整数据库参数等方式来提高查询性能。
二、如何识别慢SQL查询要识别慢SQL查询,可以通过MySQL提供的慢查询日志来查看。
在MySQL的配置文件中,我们可以设置慢查询日志的开启与关闭,并指定慢查询的阈值。
当SQL语句的执行时间超过阈值时,就会被记录在慢查询日志中。
三、如何调整慢SQL查询参数1. slow_query_log:这个参数用来开启或关闭慢查询日志记录。
如果我们想要记录慢查询日志,就需要将该参数设置为ON。
2. long_query_time:这个参数用来指定慢查询的阈值。
如果某个SQL语句的执行时间超过该阈值,就会被记录在慢查询日志中。
可以根据实际情况来调整该参数的值,通常建议设置为0.1秒或更长。
3. log_queries_not_using_indexes:这个参数用来记录没有使用索引的SQL语句。
如果我们想要记录这些语句,就需要将该参数设置为ON。
四、如何优化慢SQL查询1. 优化SQL语句:通过调整SQL语句的写法,可以减少查询的时间复杂度。
可以使用合适的索引、避免使用全表扫描、避免使用不必要的子查询等方式来优化SQL语句。
2. 添加索引:如果某个查询经常被执行,但执行时间较长,可以考虑为相关字段添加索引。
索引可以加快查询速度,但同时也会增加写操作的时间。
3. 修改数据模型:如果数据模型设计不合理,可能会导致查询效率低下。
可以通过调整表结构、拆分表等方式来优化数据模型。
4. 调整缓存大小:MySQL中的缓存可以提高查询性能。
ORACLESQL性能调优
ORACLE SQL 性能调优1序言 (2)2影响SQL PERFORMANCE的关键因素和配置: (2)2.1关于执行计划 (2)2.2ORACLE优化器 (2)2.2.1ORACLE优化器的优化方式 (2)2.2.2优化器的优化模式(Optermizer Mode) (3)2.2.3Optimizer mode优化模式级别的设定: (3)2.2.4查看对象统计信息(object statistics) (3)2.3结合B EN Q O RACLE ERP (4)2.3.1优化模式(Optermizer Mode) (4)2.3.2关于Gather (4)2.4跟踪SQL实际运行的C OST (5)2.5小结 (5)3SQL语句的TUNING经验分享: (6)3.1绝大多数情况下NOT EXISTS比NOT IN 效率高 (6)3.2UNION ALL效率比UNION高很多 (6)3.3一些很耗资源的SQL操作,在不必要的情况下不要使用 (6)3.4通常联接查询比子查询的效率要高很多 (7)3.5用TABLE 索引(INDEX)栏位去做T ABLE间的关联,可避免费时的全表扫描 (7)3.6在V IEW中尽量不要使用P ACKAGE/FUNCTION 来得到栏位值, (8)3.7通过ROWID访问表 (8)3.8必要时,可在O RACLE S TANDARD T ABLE上加索引 (9)3.9合理排列WHERE子句中的连接顺序. (9)3.10用W HERE子句替换HA VING子句 (9)3.11关于使用索引(I NDEX)的一些注意点 (10)3.11.1‘!=’,NOT操作将不使用索引. (10)3.11.2‘||’是字符连接函数. 就象其它函数那样, 停用了索引. (10)3.11.3相同的索引列不能互相比较,这将会启用全表扫描. (10)3.11.4避免在索引列上使用计算. (10)3.11.5基于成本的优化器(CBO)会对索引的选择性进行判断,来决定是否使用索引 (11)3.11.6Index信息的重新统计 (11)3.12识别“低效运行”的SQL语句 (11)1序言BenQ Sale Office自Oracle ERP上线后,随着资料量的日益加大,目前BQE,BQC,BQP这几个Site的Performance的问题都表现得越来越明显,Tunning得工作量也明显增加。
查询sql优化方法
查询sql优化方法
SQL优化是提高数据库查询性能的重要手段。
以下是一些常用的SQL优化方法:
1. 编写高效的查询语句:避免不必要的连接、子查询和全表扫描等操作,尽量使用简单的查询语句来获取所需的数据。
2. 使用合适的索引:通过为经常用作过滤条件的列创建索引,可以大大加快查询速度。
但是过多的索引也会带来额外的开销,所以需要权衡索引的使用。
3. 优化表结构设计:合理设计数据库表结构,避免出现冗余和不必要的字段,减少数据存储空间和查询时的计算开销。
4. 避免使用SELECT *:只选择需要的列,可以减少数据库从磁盘读取的数据量,提高查询速度。
5. 减少交互次数:批量操作和批量插入可以有效减少客户端与数据库之间的交互次数,提高效率。
6. 使用预编译语句:预编译语句可以减少SQL执行的开销,提高效率。
7. 分析和优化查询计划:通过分析查询执行计划,可以找到查询中的性能瓶颈,优化查询语句和索引设计。
8. 合理使用缓存:通过使用数据库缓存可以避免重复查询,提高查询速度。
9. 定期进行数据库维护:清理过期数据、重新统计索引等维护操作可以保持数据库的性能良好,并减少查询时的开销。
10. 使用数据库性能分析工具:根据数据库的实际情况,使用性能分析工具进行监控和分析,找出性能瓶颈并采取相应的优化措施。
Oracle的SQL语句执行效率问题查找与解决方法
Oracle的SQL语句执行效率问题查找与解决方法一、识别占用资源较多的语句的方法(4种方法)1.测试组和最终用户反馈的与反应缓慢有关的问题。
2.利用V_$SQLAREA视图提供了执行的细节。
(执行、读取磁盘和读取缓冲区的次数)•数据列EXECUTIONS:执行次数DISK_READS:读盘次数COMMAND_TYPE:命令类型(3:select,2:insert;6:update;7delete;47:pl/sql程序单元)OPTIMIZER_MODE:优化方式SQL_TEXT:Sql语句SHARABLE_MEM:占用shared pool的内存多少BUFFER_GETS:读取缓冲区的次数•用途1、帮忙找出性能较差的SQL语句2、帮忙找出最高频率的SQL3、帮忙分析是否需要索引或改善联接3.监控当前Oracle的session,如出现时钟的标志,表示此进程中的sql运行时间较长。
4.Trace工具:a)查看数据库服务的初始参数:timed_statistics、user_dump_dest和max_dump_file_sizeb)Step 1: alter session set sql_trace=truec)Step 2: run sql;d)Step 3: alter session set sql_trace=falsee)Step 4:使用“TKPROF”转换跟踪文件f)Parse,解析数量大通常表明需要增加数据库服务器的共享池大小,query或current提取数量大表明如果没有索引,语句可能会运行得更有效,disk提取数量表明索引有可能改进性能,library cache中多于一次的错过表明需要一个更大的共享池大小二、如何管理语句处理和选项•基于成本(Cost Based)和基于规则(Rule Based)两种优化器,简称为CBO 和RBO •Optimizer Mode参数值:Choose:如果存在访问过的任何表的统计数据,则使用基于成本的Optimizer,目标是获得最优的通过量。
SQL语句执行速度慢的原因
SQL语句执行速度慢的原因
1.数据库引擎性能:数据库引擎的性能可能不够强大,无法处理大量
数据的查询和操作请求。
建议使用高性能的数据库引擎或者优化数据库配
置来提升性能。
2.索引问题:SQL查询语句没有合适的索引或者索引使用不当也会导
致执行速度变慢。
通过分析查询语句的执行计划,确定是否需要新建索引
或者修改现有索引来优化查询速度。
3.数据库表设计问题:表的设计不合理,例如表之间的关系模型没有
规范化,冗余字段太多等。
适时调整数据表结构,减少不必要的字段和关系,能够提升数据库查询和操作的性能。
4.数据量过大:当数据库中的数据量过大时,查询和操作的速度也会
变慢。
可以通过分区、分表等方式来减少单个表的数据量,提高查询速度。
5.SQL语句书写不规范:SQL语句的书写方式不规范,例如使用了大
量的子查询或者联合查询、使用了复杂的JOIN语句等,都可能导致执行
速度变慢。
应该简化SQL语句的结构,避免不必要的嵌套和联合查询。
6.硬件问题:数据库运行所在的硬件设备不够强大或者配置不合理,
例如CPU、内存、磁盘等可能成为性能瓶颈。
可以考虑升级硬件设备或者
优化硬件配置,提升数据库执行速度。
综上所述,SQL语句执行速度慢的原因有很多,需要综合考虑数据库
引擎性能、索引设计、数据表结构、数据量、SQL语句书写规范性以及硬
件配置等因素,才能进行全面的性能优化。
2.1_SQL_Query_Tuning _and_Performance
Original query:
SELECT * FROM tab1 WHERE tab1.c1 = 10 and tab1.c2 = (SELECT max (tab2.c2) FROM tab2 WHERE tab2.c1 = tab1.c1)
Transformed to:
• Top of the list is the first table accessed
• For each table the following information is listed
2
© 2010 IBM Corporation
Agenda
• Introduction • Optimizer Overview • SET EXPLAIN Overview • Tuning Individual Query Performance • General Configuration and Monitoring • Optimizing the Query – SQL Best Practices • Optimizing the Query – Index Best Practices
• ANSI outer join to ANSI inner join transformation
• Eliminates the restriction on which table to join first imposing more join order combinations
• ANSI inner join to Informix inner join transform
• Can provide performance improvement due to parallelization
sqlserver 数据库cpu过高 排查方法
sqlserver 数据库cpu过高排查方法以下是排查 SQL Server 数据库 CPU 过高的方法:1. 使用 SQL Server Management Studio (SSMS) 的活动监视器来检查当前运行的查询和其消耗的 CPU 时间。
可以通过右键单击服务器实例,选择“活动监视器”来打开它。
2. 使用动态管理视图 (DMV) 来查找占用 CPU 的查询。
例如,可以查询 sys.dm_exec_query_stats 视图来获取查询的 CPU 消耗情况。
```sqlselect total_worker_time/execution_count as Avg_CPU_Time, creation_time,last_execution_time,total_physical_reads,total_logical_reads,execution_count,plan_handle,query_plan,sql_handlefrom sys.dm_exec_query_statscross apply sys.dm_exec_query_plan(plan_handle)order by total_worker_time/execution_count desc;```3. 检查是否存在长时间运行的查询或死锁。
可以使用sys.dm_exec_requests 和 sys.dm_exec_sessions 视图来检查当前正在运行的查询和会话状态。
```sqlselect r.session_id,r.cpu_time,r.total_elapsed_time,r.start_time,s.login_name,s.status,s.host_name,s.program_namefrom sys.dm_exec_requests rjoin sys.dm_exec_sessions s on r.session_id = s.session_idwhere r.status = 'running'order by r.cpu_time desc;```4. 检查是否存在缺失的索引导致全表扫描或索引扫描的情况。
怎样查出SQLServer的性能瓶颈
怎样查出SQLServer的性能瓶颈SQL Server是一款常用的关系型数据库管理系统,可以用于存储和管理大量的数据。
然而,在使用SQL Server时,我们常常会遇到性能瓶颈的问题,导致数据库操作变慢,影响系统的正常运行。
为了解决这些问题,我们需要对SQL Server进行性能优化,首先要查出性能瓶颈。
下面将详细介绍如何查出SQL Server的性能瓶颈。
第一步:监控系统性能要查出SQL Server的性能瓶颈,首先要对系统的性能进行监控。
可以使用SQL Server自带的性能监视工具,如Performance Monitor和SQL Server Profiler。
Performance Monitor可以监控系统的硬件性能,如CPU利用率、内存使用情况、磁盘IO等;SQL Server Profiler可以监控数据库的性能,如查询执行时间、锁定情况等。
第二步:识别慢查询在监控系统性能的基础上,我们还需要识别出哪些查询存在性能问题。
可以通过查询执行计划、系统视图和性能监视器等方式来判断哪些查询的执行时间较长或者占用较多的系统资源。
1. 使用查询执行计划:在SQL Server Management Studio中执行查询时,可以选择显示查询执行计划。
执行计划可以告诉我们查询的执行过程,包括使用了哪些索引、是否进行了表扫描等。
可以通过查看执行计划中的耗时最长的操作节点来判断性能瓶颈所在。
2. 使用系统视图:SQL Server中有一些系统视图,如sys.dm_exec_query_stats和sys.dm_exec_query_plan,可以查询有关查询的性能信息。
可以通过查找执行时间最长的查询语句,并分析其执行计划,判断性能瓶颈所在。
3. 使用性能监视器:可以通过性能监视器来监控数据库的性能指标,如平均响应时间、平均锁等待时间等。
可以根据这些指标判断哪些查询存在性能问题。
第三步:分析性能瓶颈在识别出慢查询之后,我们需要对慢查询进行分析,找出性能瓶颈所在。
SQL查询速度慢的原因分析和解决方案
SQL查询速度慢的原因分析和解决⽅案SQL查询速度慢的原因分析和解决⽅案查询速度慢的原因很多,常见如下⼏种: 1、没有索引或者没有⽤到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量⼩,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不⾜ 5、⽹络速度慢 6、查询出的数据量过⼤(可以采⽤多次查询,其他的⽅法降低数据量) 7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8、sp_lock,sp_who,活动的⽤户查看,原因是读写竞争资源。
9、返回了不必要的⾏和列 10、查询语句不好,没有优化 可以通过如下⽅法来优化查询 : 1、把数据、⽇志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在⽀持。
数据量(尺⼨)越⼤,提⾼I/O越重要. 2、纵向、横向分割表,减少表的尺⼨(sp_spaceuse) 3、升级硬件 4、根据查询条件,建⽴索引,优化索引、优化访问⽅式,限制结果集的数据量。
注意填充因⼦要适当(最好是使⽤默认值0)。
索引应该尽量⼩,使⽤字节数⼩的列建索引好(参照索引的创建),不要对有限的⼏个值的字段建单⼀索引如性别字段 5、提⾼⽹速; 6、扩⼤服务器的内存,Windows 2000和SQL server2000能⽀持4-8G的内存。
配置虚拟内存:虚拟内存⼤⼩应基于计算机上并发运⾏的服务进⾏配置。
运⾏ Microsoft SQLServer? 2000 时,可考虑将虚拟内存⼤⼩设置为计算机中安装的物理内存的 1.5 倍。
如果另外安装了全⽂检索功能,并打算运⾏Microsoft 搜索服务以便执⾏全⽂索引和查询,可考虑:将虚拟内存⼤⼩配置为⾄少是计算机中安装的物理内存的 3倍。
将 SQLServer max server memory 服务器配置选项配置为物理内存的 1.5 倍(虚拟内存⼤⼩设置的⼀半)。
SQL系统进程的运行(status)状态(Runnable、Running、Suspend。。。
SQL系统进程的运⾏(status)状态(Runnable、Running、Suspend。
SQL 系统进程的运⾏(status)状态(Runnable、Running、Suspended、Sleeping、Pending、Dormant、Background、Spinlock)1、状态(status)解释“pending”(等待),代表这个process,既没有Thread可⽤,也没有CPU可⽤,正在同时等待这两项系统资源。
“runnable”,代表这个process,有Thread可⽤,但没有CPU可⽤,所以它正在等待CPU这项系统资源。
“running”,代表这个process,有Thread可⽤,有CPU可⽤。
“suspended”(暂停),代表这个process,正在「等待」别的process执⾏,等待的系统资源可能是Disk I/O或数据库的Lock。
(若这个process执⾏的SELECT没加上NOLOCK关键字,⽽别的process正在进⾏「交易」或写⼊(会加Lock),则这个SELECT的process就会呈现“suspended”的状态。
)“sleeping”,代表这个process,⽬前没在做任何事,正在等待进⼀步的指令。
(sleeping 代表建⽴了数据库连接,但程序没有发出SQL命令. 因为应⽤程序为了减少打开和关闭连接的开销,在完成数据库中的操作后,仍然保持数据库的连接,这些连接的最主要⽬的是重⽤。
)“dormant”(暂时搁置),代表SQL Server正在对这个process做reset。
“background”,代表这个process正在SQL Server背景执⾏。
即使你看到有很多“background”process正在执⾏,也不必担⼼。
“Spinlock”(⾃旋锁),本质上意味着查询处于某种运⾏模式,它在CPU中忙于等待⾃⼰的轮询。
2、查看的⼏种⽅式://1SELECT * FROM sys.sysprocesses;//2EXEC sp_who2;//3SELECT sqltext.TEXT, req.session_id, req.status, mand, req.cpu_time, req.blocking_session_id, req.total_elapsed_timeFROM sys.dm_exec_requests req (NOLOCK)CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext3、sys.sysprocesses 主要字段解释Spid:Sql Servr 会话IDKpid:Windows 线程IDBlocked:正在阻塞求情的会话 ID。
查询CPU占用高的SQL语句的解决方案
查询CPU占⽤⾼的SQL语句的解决⽅案触发器造成死锁、作业多且频繁、中间表的⼤量使⽤、游标的⼤量使⽤、索引的设计不合理、事务操作频繁、SQL语句设计不合理,都会造成查询效率低下、影响服务器性能的发挥。
我们可以使⽤sql server⾃带的性能分析追踪⼯具sql profiler分析数据库设计所产⽣问题的来源,进⾏有针对性的处理;下⾯⼩编收集了SQL Server中如何查询CPU占⽤⾼的SQL语句,希望⼤⼤家能有所帮助。
注意:SQL Server中查询CPU占⽤⾼的情况,经常会⽤到sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests1、查看当前的数据库⽤户连接数USE masterGOSELECT * FROM sys.[sysprocesses] WHERE [spid]>50 --AND DB_NAME([dbid])='gposdb'SELECT COUNT(*) FROM [sys].[dm_exec_sessions] WHERE [session_id]>502、选取前10个最耗CPU时间的会话SELECT TOP 10[session_id],[request_id],[start_time] AS '开始时间',[status] AS '状态',[command] AS '命令',dest.[text] AS 'sql语句', DB_NAME([database_id]) AS '数据库名',[blocking_session_id] AS '正在阻塞其他会话的会话ID',[wait_type] AS '等待资源类型',[wait_time] AS '等待时间',[wait_resource] AS '等待的资源',[reads] AS '物理读次数',[writes] AS '写次数',[logical_reads] AS '逻辑读次数',[row_count] AS '返回结果⾏数'FROM sys.[dm_exec_requests] AS der CROSS APPLYsys.[dm_exec_sql_text](der.[sql_handle]) AS destWHERE [session_id]>50 AND DB_NAME(der.[database_id])='gposdb'ORDER BY [cpu_time] DESC3、查询前10个最耗CPU时间的SQL语句--在SSMS⾥选择以⽂本格式显⽰结果SELECT TOP 10dest.[text] AS 'sql语句'FROM sys.[dm_exec_requests] AS derCROSS APPLYsys.[dm_exec_sql_text](der.[sql_handle]) AS destWHERE [session_id]>50ORDER BY [cpu_time] DESC4、查询CPU占⽤⾼的语句SELECT TOP 10 total_worker_time/execution_count AS avg_cpu_cost,plan_handle, execution_count, (SELECT SUBSTRING(text,statement_start_offset/2 + 1, (CASE WHEN statement_end_offset = -1THEN LEN(CONVERT(nvarchar(max), text)) * 2ELSE statement_end_offsetEND - statement_start_offset)/2)FROM sys.dm_exec_sql_text(sql_handle)) AS query_textFROM sys.dm_exec_query_stats。
queryperformancecounter使用方法
queryperformancecounter使用方法一、什么是QueryPerformanceCounterQueryPerformanceCounter是一个Windows API,它可以获取一个非常精确的时间计数器(以百万分之一秒为单位)。
它使得开发人员可以更准确的测量程序的执行时间,使得程序的效率可以进一步提高。
二、使用QueryPerformanceCounter使用QueryPerformanceCounter需要定义一个LARGE_INTEGER类型的变量,用来存放获取到的计数器值:LARGE_INTEGER start_time;然后调用QueryPerformanceCounter函数获取计数器的值:QueryPerformanceCounter(&start_time);最后可以把当前计数器的值减去之前保存的旧计数值来计算出程序运行的时间:LARGE_INTEGER end_time;QueryPerformanceCounter(&end_time);LARGE_INTEGER time_diff;time_diff.QuadPart = end_time.QuadPart -start_time.QuadPart;//计算得到的time_diff是以百万分之一秒为单位,可以转换为更适合人们理解的单位处理:LARGE_INTEGER performance_frequency;QueryPerformanceFrequency(&performance_frequency);__int64 total_time = time_diff.QuadPart * 1000 / performance_frequency.QuadPart;//total_time的单位就是毫秒三、 QueryPerformanceCounter优缺点QueryPerformanceCounter优点:1、可以获取非常精确的时间计数器,可以准确的测量时间;2、开发人员可以利用这个函数来检查程序的效率,并发现程序的缺陷。
MySQLSQL语句分析查询优化
MySQLSQL语句分析查询优化如何获取有性能问题的SQL1、通过⽤户反馈获取存在性能问题的SQL2、通过慢查询⽇志获取性能问题的SQL3、实时获取存在性能问题的SQL使⽤慢查询⽇志获取有性能问题的SQL⾸先介绍下慢查询相关的参数1、slow_query_log 启动定制记录慢查询⽇志设置的⽅法,可以通过MySQL命令⾏设置set global slow_query_log=on或者修改/etc/f⽂件,添加slow_query_log=on2、slow_query_log_file 指定慢查询⽇志的存储路径及⽂件建议⽇志存储和数据存储分开存储3、long_query_time 指定记录慢查询⽇志SQL执⾏时间的阈值①记录所有符合条件的SQL②数据修改语句③包括查询语句④已经回滚的SQL注意:时间可以精确到微秒,存储的单位是秒,默认值为10秒,例如我们想查询1微秒的值,这⾥就要设置成0.001秒4、log_queries_not_using_indexes 是否记录未使⽤索引的SQL5、log_output 设置慢⽇志查询的保存格式(如果需要保存为⽂件请修改成FILE)慢查询使⽤⽇志中记录的信息1、第⼀⾏记录的信息为使⽤sbtest做的测试2、第⼆⾏记录的信息为慢查询⽇志的时间3、第三⾏记录的信息为所使⽤锁的时间4、第四⾏记录的信息为返回的数据⾏数5、第五⾏记录的信息为扫描数据的⾏数6、第六⾏记录的信息为时间戳7、第七⾏记录的信息为查询的SQL语句使⽤慢查询获取有性能问题的SQL常使⽤的慢查询⽇志分析⼯具(mysqldumpslow)介绍:汇总除查询条件外其他完全相同的SQL,并将分析结果按照参数中所指定的顺序输出慢查询⽇志实例慢查询的相关配置设置命令⾏执⾏参数查看分析的结果]# cd /var/lib/mysql/log]# mysqldumpslow -s r -t 10 slow-mysql常使⽤的慢查询⽇志分析⼯具(pt-query-digest)使⽤⼯具前,需要先安装该⼯具,如果已有,可略过下⾯的安装步骤1、perl模块]# yum install -y perl-CPAN perl-Time-HiRes perl-IO-Socket-SSL perl-DBD-mysql perl-Digest-MD52、切换⾄src⽬录下载rpm包]# cd /usr/local/src]# wget https:///downloads/percona-toolkit/3.0.7/binary/redhat/7/x86_64/percona-toolkit-3.0.7-1.el7.x86_64.rpm 3、安装⼯具包]# rpm -ivh percona-toolkit-3.0.7-1.el7.x86_64.rpm执⾏命令分析慢查询⽇志]# pt-query-digest --user=root --password=redhat --host=127.0.0.1 slow-mysql > slow.rep分析的结果如下MySQL服务器处理查询请求的整个过程1、客户端发送SQL请求给服务器2、服务器检查是否存在在缓存服务器中命中该SQL3、服务器端进⾏SQL解析,预处理,再由优化器对应执⾏计划4、根据执⾏计划,调⽤存储引擎API来查询数据5、将结果返回给客户端查询缓存对SQL性能的影响1、优先检查整个查询是否命中查询缓存中的数据2、通过⼀个对⼤⼩写敏感的哈希查找实现的查询缓存的优化参数query_cache_type 设置查询缓存是否可⽤ON,OFF,DEMAND注意:DEMAND表⽰只有在查询语句中使⽤SQL——CACHE和SQL_NO_CACHE来控制是否需要缓存query_cache_size 设置查询缓存的内存⼤⼩query_cache_limit 设置查询缓存可⽤存储的最⼤值query_cache_wlock_invalidate 设置数据表被锁后是否返回缓存中的数据(默认是关闭的,建议也是关闭的此选项)query_cache_min_res_unit 设置查询缓存分配的内存块最⼩的值会造成MySQL⽣成错误的执⾏计划的原因1、统计信息不准确2、执⾏计划中的成本估算不等同于实际的执⾏计划的成本3、MySQL优化器所认为的最优可能与你所认为的最优不⼀样4、MySQL从不考虑其他并发的查询,这可能会影响当前查询数据5、MySQL有时候也会基于⼀些固定的规则来⽣成执⾏计划6、MySQL不会考虑不受其控制的成本MySQL优化器可优化的SQL类型1、重新定义表的关联顺序优化器会根据统计信息来决定表的关联顺序2、将外链接转换成内连接where条件和库表结构等3、使⽤等价变换规则(5=5 and a > 5)将会被改写成 a > 54、优化count(), min()和max()select tables optimized away优化器已经从执⾏计划中移除了该表,并以⼀个常数取⽽代之5、将⼀个表达式转换为常数表达式6、使⽤等价变换规则7、⼦查询优化8、对in()条件进⾏优化如何确定查询处理各个阶段所消耗的时间使⽤profileset profiling = 1;执⾏查询:show profiles;show profile for query N;查询的每个阶段所消耗的时间使⽤profile查看语句所消耗的时间特定的SQL查询优化1、利⽤主从切换的原理进⾏⼤表的表结构修改,例如,现在从服务器上修改,修改完毕以后,进⾏主从切换,再在原来⽼的主上进⾏⼤表的修改,存在⼀定的风险。
mysql 查top sql 的语句-概述说明以及解释
mysql 查top sql 的语句-概述说明以及解释1.引言1.1 概述概述在进行数据库性能优化的过程中,了解和查找Top SQL语句是非常重要的一步。
Top SQL指的是对数据库性能产生最大影响的SQL语句,通过找到并优化这些SQL语句,可以大大提升数据库的运行效率和响应速度。
本文将介绍Top SQL的概念以及如何通过MySQL来查找Top SQL语句,从而帮助读者更好地了解和优化数据库性能。
首先,我们需要明确什么是Top SQL。
在数据库中,每个SQL语句的执行都会占用一定的系统资源,包括CPU、内存和磁盘IO等。
而Top SQL 指的是那些在执行过程中消耗了大量系统资源或执行时间较长的SQL语句。
这些SQL语句可能是由于数据量过大、索引不合理或者逻辑错误等原因导致的性能问题。
因此,通过查找和优化这些Top SQL语句,可以有效地提高数据库的整体性能。
接下来,我们将介绍如何通过MySQL来查找Top SQL语句。
MySQL 提供了许多工具和技术来帮助我们分析和优化数据库性能。
其中一个常用的工具是慢查询日志(Slow Query Log)。
慢查询日志会记录下执行时间超过一定阈值的SQL语句,我们可以通过分析慢查询日志的内容来找出Top SQL语句。
除了慢查询日志外,MySQL还提供了一些内置的系统视图和命令来查找Top SQL语句。
例如,我们可以使用SHOW PROCESSLIST命令来查看当前正在执行的SQL语句和相关的信息。
另外,通过查询information_schema库中的表,我们可以获取到执行次数最多、消耗资源最多以及执行时间最长的SQL语句。
总之,在数据库性能优化的过程中,了解和查找Top SQL语句是非常重要的一步。
通过找出并优化这些SQL语句,可以提高数据库的运行效率和响应速度,从而更好地满足用户的需求。
在接下来的内容中,我们将详细介绍如何查找Top SQL语句以及对数据库性能优化的意义。
慢sql治理流程
慢SQL治理流程在数据库管理中,慢查询(Slow Query)是指那些执行时间超过预定阈值的SQL 语句。
这些语句由于各种原因(如缺乏索引、数据量大、查询复杂等)导致执行效率低下,从而拖慢整个数据库的性能。
因此,慢SQL治理成为数据库性能优化的重要环节。
本文将详细介绍慢SQL治理的流程,包括识别、分析、优化和监控四个主要步骤。
一、慢SQL识别慢SQL治理的第一步是识别出那些执行缓慢的SQL语句。
这通常通过以下几种方式实现:1. 慢查询日志:大多数数据库管理系统(DBMS)都提供慢查询日志功能,可以记录执行时间超过指定阈值的SQL语句。
管理员需要定期查看这些日志,找出需要优化的语句。
2. 性能监控工具:除了慢查询日志外,还可以使用专业的数据库性能监控工具来实时监控SQL语句的执行情况。
这些工具可以提供更详细的性能数据,帮助管理员快速定位问题语句。
3. 用户反馈:有时候,用户在使用系统时会遇到明显的性能瓶颈,这时候他们提供的反馈也是识别慢SQL的重要来源。
二、慢SQL分析识别出慢SQL后,下一步是对这些语句进行详细的分析,找出导致执行缓慢的具体原因。
分析过程包括以下几个方面:1. 执行计划分析:通过查看SQL语句的执行计划,可以了解数据库是如何执行这个查询的。
执行计划会显示查询的各个步骤、使用的索引、数据扫描的数量等信息。
管理员可以通过分析这些信息来判断查询是否高效。
2. SQL语句结构分析:有时候,SQL语句本身的结构问题也会导致执行缓慢。
例如,使用了不恰当的连接方式、子查询过多、查询条件不合理等。
管理员需要检查语句的结构,看是否存在可以优化的地方。
3. 数据分布和统计信息分析:数据库中的数据分布和统计信息对查询性能有很大影响。
如果数据分布不均匀或者统计信息不准确,可能导致查询优化器做出错误的决策。
管理员需要定期检查数据的分布情况和统计信息的准确性。
4. 系统资源分析:除了SQL语句本身的问题外,系统资源的瓶颈也可能导致查询执行缓慢。
SQL查询超时的设置方法(关于timeout的处理)
SQL查询超时的设置⽅法(关于timeout的处理)为了优化OceanBase的query timeout设置⽅式,特调研MySQL关于timeout的处理,记录如下。
复制代码代码如下:mysql> show variables like '%time%';+----------------------------+-------------------+| Variable_name | Value |+----------------------------+-------------------+| connect_timeout | 10 || datetime_format | %Y-%m-%d %H:%i:%s || delayed_insert_timeout | 300 || flush_time | 1800 || innodb_lock_wait_timeout | 50 || innodb_old_blocks_time | 0 || innodb_rollback_on_timeout | OFF || interactive_timeout | 28800 || lc_time_names | en_US || lock_wait_timeout | 31536000 || long_query_time | 10.000000 || net_read_timeout | 30 || net_write_timeout | 60 || slave_net_timeout | 3600 || slow_launch_time | 2 || system_time_zone | || time_format | %H:%i:%s || time_zone | SYSTEM || timed_mutexes | OFF || timestamp | 1366027807 || wait_timeout | 28800 |+----------------------------+-------------------+21 rows in set, 1 warning (0.00 sec)重点解释其中⼏个参数:connect_timeout:The number of seconds that the mysqld server waits for a connect packet before respondingwith Bad handshake. The default value is 10 seconds as of MySQL 5.1.23 and 5 seconds before that. Increasing the connect_timeout value might help if clients frequently encounter errors of the form Lost connection to MySQL server at ‘XXX', system error: errno.解释:在获取链接时,等待握⼿的超时时间,只在登录时有效,登录成功这个参数就不管事了。
slave_io_running slave_sql_running 解释
`slave_io_running` 和`slave_sql_running` 是MySQL 数据库中与主从复制(Master-Slave Replication)相关的两个状态变量。
这两个变量记录了MySQL 从服务器(Slave)的两个关键组件——I/O线程和SQL线程的运行状态。
主从复制是一种数据库复制技术,用于将一个数据库的更改同步到另一个数据库,通常用于提高数据的可用性、备份数据、以及分担读写负载。
## `slave_io_running`### 概念`slave_io_running` 是一个MySQL 系统变量,它表示从服务器上的I/O 线程是否正在运行。
在主从复制中,I/O 线程负责从主服务器读取二进制日志文件,并将其复制到从服务器上的中继日志文件中。
该线程的运行状态对于确保主从同步非常重要。
### 取值- `ON`:表示I/O 线程正在运行,正常工作。
- `OFF`:表示I/O 线程没有在运行,可能出现了错误或者主从同步出现了问题。
### 作用- **正常同步:** 当`slave_io_running` 的值为`ON` 时,表示从服务器的I/O 线程正常运行,能够及时从主服务器获取更新的二进制日志,确保主从同步的进行。
- **问题检测:** 当`slave_io_running` 的值为`OFF` 时,表示I/O 线程出现了问题,可能是由于网络故障、主服务器宕机、权限问题等引起的。
此时需要及时检查并解决问题,以恢复主从同步。
## `slave_sql_running`### 概念`slave_sql_running` 是另一个MySQL 系统变量,它表示从服务器上的SQL 线程是否正在运行。
在主从复制中,SQL 线程负责执行从主服务器接收到的更新的二进制日志,将这些更新应用到从服务器上的数据库。
### 取值- `ON`:表示SQL 线程正在运行,正常工作。
- `OFF`:表示SQL 线程没有在运行,可能出现了错误或者执行SQL 语句时发生了问题。
如何进行数据库性能跟踪[死锁]--sql2005及以上版本
SQL Server数据库跟踪艾国光,杨政雨关键字:性能、SQL Server、数据库问题:THIS4系统主要运行在Windows+SQL Server平台上,在发生性能问题时需要针对服务器、数据库和应用程序三方面进行分析,本文介绍对SQL Server数据库进行性能跟踪的方法。
步骤:1.“开始“-》运行MSSQL Server-》性能工具菜单下的SQL server Profiler程序。
2.用sa登录后弹出属性设置界面,在模板名下拉列表中选择Tuning模板。
3.在事件页面可以看到’已选定事件’中已添加了‘sql:batchcompleted’和‘rpc:completed’,’sp:stmtcompleted’4.勾上‘显示所有列’,依次选中这些列:ApplicationName/CPU/EndTime/HostName/Reads/StartTime/Writes/Objectname/Servername/Error/ClientProcessId/LoginName跟踪死锁事件Deadlock graphLock: DeadlockLock: Deadlock Chain5.为了方便快速了解各关键参数的值,点击‘组织列’,将各参数显示顺序进行排列。
推荐参数排列顺序如下图:6.点击‘列筛选器’按钮,加入Duration大于或等于1500的条件,点击运行按钮开启跟踪。
(若要跟踪某个业务慢,可以记录运行此业务的电脑任务管理器中应用程序的PID,然后在‘列筛选器’中过滤ClientProcessID=PID值,其他条件不做限制,进行单机跟踪。
)7.跟踪一段时间(选择系统繁忙的时间段跟踪3-5小时)后,保存跟踪日志(文件-另存为跟踪文件 .trc)。
(注,还可以文件->另存为跟踪模板-“日常跟踪”,方便以后直接选择这个模板来进行数据库跟踪)8、边跟踪边保存到文件此方式可以防止跟踪被他人误关闭,丢失跟踪数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL Quer y Perfor mance T uningP er for mance tuning is an impor tant par t of today’s database applications.V er y often,lar gesavings in both time and money can be achieved with proper per for mance tuning.The beautyof per for mance tuning is that,in many cases,a small change to an index or a SQL quer y canresult in a far mor e efficient application.Ther e ar e,ho w e ver,many pitfalls for the unwar y.As a result,a pr o v en pr ocess is require dto ensur e that y ou corr ectly identify and r esolve per for mance bottlenecks.To whet y our appetite for the types of topics essential to honing y our quer y optimizationskills,her e is a quick list of the quer y optimization aspects I will cover in this book:•I dentifying pr oblematic SQL quer ies•Analyzing a quer y execution plan•E v aluating the effectiveness of the curr ent indexes•A voiding bookmar k lookups•E v aluating the effectiveness of the curr ent statistics•Analyzing and r esolving fr agmentation•O ptimizing execution plan caching•Analyzing and avoiding stor ed pr ocedure recompilation•M inimizing blocking and deadlocks•E xamining the cost of using a specific cursor type•O ptimizing database connection cost•A pplying per for mance tuning pr ocesses,tools,and optimization techniques to optimizeSQL workload12B efor e jumping str aight in to these topics,let’s first examine why w e go about per for m-ance tuning the way w e do.I n this chapter,I discuss the basic concepts of per for mance tuning for a SQL S er v er database system.I detail the main per for mance bottlenecks and sho w justho w impor tant it is to design a database-fr iendly application,which is the consumer of thedata,as w ell as optimize the database.S pecifically,I cover the following topics:•The per for mance tuning pr ocess•P er for mance versus pr ice•The per for mance baseline•Wher e to focus effor ts in tuning•The top11SQL S er v er per for mance killersSo,without fur ther ado,let’s begin.The P erformance T uning ProcessThe per for mance tuning pr ocess consists of identifying per for mance bottlenecks,tr ouble-shooting their cause,applying differ ent resolutions,and then quantifying per for manceimpr o v ements.I t is necessar y to be a little cr eative,since most of the time ther e is no onesilver bullet to impr o v e per for mance.The challenge is to narr o w do wn the list of possiblereasons and ev aluate the effects of differ ent resolutions.Y ou may even undo modificationsas y ou iter ate thr ough the tuning pr ocess.Du r ing the tuning pr ocess, y ou must examine v a rious har dware and softwar e factors that can affect the per for mance of a SQL S er v er–based application.A few of the gener al questions y ou should be asking y ourself dur ing the per for mance analysis ar e as follo ws:•I s any other resource-intensive application r unning on the same ser ver?•I s the har dware subsystem capable of withstanding the maximum wor kload?•I s SQL S er v er configur ed pr operly?•I s the database connection betw een SQL S er v er and the database application efficient?•Does the database design suppor t the fastest data r etr iev al(and modification for anupdateable database)?•I s the user workload,consisting of SQL quer ies,optimiz ed to r educe the load on SQLSe r v er?•Does the workload suppor t the maximum concurr ency?If any of these factors is not configur ed pr operly,then the o v er all system per for mance may suffer.Let’s br iefly examine these factors.Having another resource-intensive application on the same ser ver can limit the resour ces av ailable to SQL S er v er.E v en an application r unning as a ser vice can consume a good par tof the system resour ces,limiting the resour ces av ailable to SQL S er v er. C onsider that evenr unning W indo ws T ask M anager continuously on the ser ver is not r ecommended.W indo ws3 Task M anager is also an application,taskmgr.exe,which r uns at a higher pr ior ity than the SQLSe rv er pr ocess. T o determine the pr ior ity of a pr ocess,follo w these steps:unch W indo ws T a sk M anager.2.S elect V iew S elect C o lumns.3.S elect the B ase P r ior ity check bo x.4.Click the OK button.These steps will add the B ase P r ior ity column to the list of pr ocesses.S ubsequently, y o uwill be able to determine that the SQL S er v er pr ocess(sqlservr.exe)b y default r uns atNo rm al pr ior ity,whereas the W indo ws T ask M anager pr ocess(taskmgr.exe)r uns at High pr i-or ity.Therefor e,to allo w SQL S er v er to maximiz e the use of av ailable resour ces, y ou shouldlook for all the nonessential applications/ser vices r unning on the SQL S er v er machine andensur e that they ar e not acting as resour ce hogs.I mproper configur ation of the har dware can pr event SQL S er v er fr om gaining the maximumbenefit fr om the av ailable resour ces.The main har dware resour ces to be consider ed ar e pr oces-sor,memor y,disk,and networ k.F or example,in a ser ver with mor e than 4GB of memor y,animproper memor y configur ation will pr event SQL S er v er fr om using the memor y bey ond 4GB.Fu r thermor e,if the capacity of a par ticular resour ce is small,then it can soon become a per for m-ance bottleneck for SQL S er v er.Chapter2covers these har dware bottlenecks in detail.Y ou should also look at the configur ation of SQL S er v er,since proper configur ation isessential for an optimiz ed application.Ther e is a long list of SQL S er v er configur ations thatdefine the gener ic behavior of a SQL S er v er installation.These configur ations can be view edand modified using a system stor ed pr ocedure,sp_configure.M any of these configur ationscan be managed inter actively thr ough SQL S er v er Enterpr ise M anager.S ince the SQL S er v er configur ations ar e applicable for the complete SQL S er v er installa-tion,a standard configur ation is gener ally pr eferr ed.The good news is that,gener ally, y o uneed not modify these configur ations;the default settings wor k best for most situations.I nfact,the gener al r ecommendation is to keep the SQL S er v er configur ations at the defaultv alues.I discuss the configur ation parameters in detail thr oughout the book.P oor connectivity betw een SQL S er v er and the database application can hur t applicationper for mance.One of the questions y ou should ask y ourself is―H o w good is the database con- nection?‖F or example,the quer y executed b y the application may be highly optimized,butthe database connection used to submit this quer y may add considerable o v er head to thequer y per for mance.B ased on the distr ibution of the application and the database,differ entnetwor k pr otocols should be used to r educe the networ k o v er head.A dditionally,the dataaccess lay er used to manage the database connectivity abo ve the networ k connection may notbe efficient.The data access lay er technology or the way the data access lay er is used b y the application may not be optimal.Chapter15covers the database connection aspects in detail.The design of the database should also be analyz ed while tr oubleshooting per for mance.This helps y ou understand not only the entity-r elationship model of the database,but alsowhy a quer y may be wr itten in a cer tain way.Although it may not always be possible to modifya database design because of wider implications on the database application,a good under-standing of the database design helps y ou to focus in the r ight direction and to understandthe impact of a resolution.4If the pr evious configur ations ar e quite nor mal or have to be the way they ar e,then the question becomes―I s the application slo w because of poorly designed or indexed quer ies?‖ The workload may contain resource-intensive or nonoptimized quer ies,which may hur t the per for mance of the quer ies and that of other quer ies in the workload.I cover index optimiza-tion in depth in Chapters3,4,5,and6.The next question at this stage should be―I s a quer yslo w because of its resour ce intensiveness or because of concurr ency issues with otherquer ies?‖Y ou can find in-depth infor mation on blocking analysis in Chapter12.The challenge is to find out which factor is causing the per for mance bottleneck.F or example,with slow-r unning SQL quer ies and high pr essure on the har dware resour ces, y o umay find that both poor database design and nonoptimized workload ar e to blame.I n sucha case, y ou must diagnose the symptoms fur ther and correlate the findings with possiblecauses.As per for mance tuning can be time-consuming and tiresome, y ou should ideally takea pr eventive appr oachb y designing the system for optimum per for mance fr om the outset.To strengthen the pr eventive appr oach,ever y lesson that y ou lear n dur ing the optimiza- tion of poor per for mance should be consider ed an optimization guideline when implement- ing new database applications.Ther e ar e also pr o v en best pr actices that y ou should consider while implementing database applications.I present these best pr actices in detail thr oughout the book,and Chapter18is dedicated to optimization best pr actices.P lease ensur e that y ou take the per for mance optimization techniques into consider ation at the early stages of y our database application development.Doing so will help y ou r oll outy our database pr ojects without big surpr ises later.U nfortunately,w e r a r ely live up to this ideal and often find database applications needing per for mance tuning.Therefor e,it is impor tant to understand not only ho w toimpr o v e the per for mance of a SQL S er v er–based application,but also ho w to diagnose thecauses of poor per for mance.An I terativ e P r ocessPe r for mance tuning is an iter ativ e pr ocess,where y ou identify major bottlenecks,attempt tor esolve them,measur e the impact of y our changes,and r etur n to the first step until per for m- ance is acceptable.While applying y our solutions, y ou should follo w the golden rule of making only one change at a time. Any change usually affects other parts of the system,so y ou mustr e-ev aluate the effect of each change on the per for mance of the o v er all system.As an example,the addition of an index may fix the per for mance of a specific quer y,but it could cause other quer ies to r un mor e slo wly,as explained in Chapter4. C onsequently,itis pr efer able to conduct per for mance analysis in a test envir onment,to shield users fr omy our diagnosis attempts and intermediate optimization steps.I n such a case,ev aluating onechange at a time also helps in pr ioritizing the implementation or der of the changes on theproduction ser ver,based on their r elative contr ibutions.Y ou can keep on chipping away at per for mance bottlenecks and impr o ving the system per for mance gr adually.I n itially, y ou will be able to r esolve big per for mance bottlenecks andachieve significant per for mance impr o v ements,but as y ou pr oceed thr ough the iterations,y our r eturns will gr adually diminish.Therefor e,to use y our time efficiently,it is worthwhile toquantify the per for mance objectives first(for example,an 80% r eduction in the time taken for a cer tain quer y,with no adverse effect anywhere else on the ser ver),and then wor k to war d them.5 The per for mance of a SQL S er v er application is highly dependent on the amount anddistr ibution of user activity(or workload)and data.B oth the amount and distr ibution of wor k-load and data change o v er time,and differ ing data can cause SQL S er v er to execute SQL quer iesdiffer ently.The per for mance resolution applicable for a cer tain workload and data may lose itseffect o v er a per iod of time.Therefor e,to ensur e an optimum system per for mance on a continu-ing basis, y ou will need to analyz e per for mance at r egular inter v als.P er f or mance tuning is anever-ending pr ocess,as sho wn in F igur e1-1.Figure1-1.Per formance tuning pr ocess6Y ou can see that the steps to optimize the costliest quer y make for a complex pr ocess , which also requires multiple iterations to tr oubleshoot the per for mance issues within the quer y and apply one change at a time . The steps involved in the optimization of the costliest quer y ar e sho wn in F igur e 1-2.sFigure 1-2. O ptimization of the costliest quer y7 As y ou can see fr om this pr ocess,ther e is quite a lot to do to ensur e that y ou corr ectlytune the per for mance of a given quer y.I t is impor tant to use a solid pr ocess like this in per-for mance tuning,to focus on the main identified issues.Ha ving said this,it also helps to tr y and keep a broader perspective about the pr oblem asa whole,since sometimes y ou may believe that y ou ar e tr ying to solve the correct per for mance bottleneck,when in r eality something else is causing the pr oblem.P erformance vs.PriceOne of the points I touched on earlier is that to gain incr easingly small per for mance incre-ments, y ou need to spend incr easingly lar ge amounts of time and money.Therefor e,to ensur ethe best r etur n on y our investment, y ou should be ver y objective while optimizing per for m-ance. Always consider the following two aspects:•What is the acceptable per for mance for y our application?•I s the investment wor th the per for mance gain?To der ive maximum efficiency, y ou must r ealistically estimate y our per for mance require-ments.Ther e ar e many best pr actices that y ou can follo w to impr o v e per formance—forexample, y ou can have y our database files on the most efficient disk subsystem.H o w e ver,befor e applying a best pr actice, y ou should consider ho w much y ou may gain fr om it andwhether the gain will be wor th the investment.S ometimes it is r eally difficult to estimate the per for mance gain without actually makingthe enhancement.A pr actical appr oach can be to increase a resour ce in incr ements andanalyz e the application’s scalability with the added resour ce.A scalable application will pr o-por tionately benefit fr om an incr emental increase of the resour ce,if the resour ce was tr ulycausing the scalability bottleneck.I f the results appear to be satisfactor y,then y ou can committo the full enhancement.E xper ience also plays a ver y impor tant r ole her e.―G ood Enough‖ T uningI nstead of tuning a system to the theor etical maximum per for mance,the goal should be totune until the system per for mance is―good enough.‖This is a commonly adopted per for m-ance tuning appr oach.The cost investment after such a point usually increases exponentiallyin compar ison to the per for mance gain.The80:20rule wor ks ver y well:b y investing 20% ofy our resour ces, y ou may get 80% of the possible per for mance enhancement,but for theremaining 20% possible per for mance gain, y ou may have to invest an additional 80% ofresour ces,as sho wn in F igur e1-3.I t is ther efor e impor tant to be r ealistic when setting y ourper for mance objectives.8Figure1-3.Per formance gain vs.inv estmentA business benefits not b y consider ing pur e per for mance,but b y consider ing pr ice per-for mance.H o w e ver,if the tar get is to find the scalability limit of y our application(for v a rious reasons,including mar keting the product against its competitors),then it may be worthwhile investing as much as y ou can.E v en in such cases,using a third-par ty str ess test lab may be a better investment decision.P erformance BaselineOne of the main objectives of per for mance analysis is to understand the underlying level ofsystem use or pr essure on differ ent har dware and softwar e subsystems.This kno wledge helps y ou in the following ways:•Allo ws y ou to analyz e resour ce bottlenecks.•E nables y ou to tr oubleshoot b y compar ing system utilization patterns with a pr e-established baseline.•Assists y ou in making accur ate estimates in capacity planning and scheduling har dwareupgrades.•Aids y ou in identifying low-utilization per iods,when the database administr ative activ-ities can be executed.•H elps y ou to estimate the natur e of possible har dware do wnsizing.This sounds inter-esting—why would a company do wnsiz e? W ell,in the past,some companies leasedver y high-end systems expecting str ong gr o wth,but due to poor gr o wth,they ar e no wfor ced to do wnsiz e their system setups.9 Therefor e,to better understand y our application’s resour ce requir ements, y ou shouldcr eate a baseline for y our application’s har dware and softwar e usage.A baseline ser v es as astatistic of y our system’s curr ent usage patter n and as a r efer ence with which to compar efuture statistics.B aseline analysis helps y ou to understand y our application’s behavior dur inga stable per iod,ho w har dware resour ces ar e used dur ing such per iods,and what the softwar echar acter istics ar e.W ith a baseline in place, y ou can•M easur e curr ent per for mance and express y our application’s per for mance goals.•C ompar e other har dware or softwar e combinations against the baseline.•M easur e ho w the workload and/or data changes o v er time.•E v aluate the peak and nonpeak usage patter n of the application.This infor mation canbe used to effectively distr ibute database administr ation activities,such as full data-base backup and database defr agmentation dur ing nonpeak hours.Y ou can use the S ystem M onitor tool(also r eferr ed to as P er for mance M onitor)to cr eate a baseline for SQL S er v er’s har dware and softwar e resour ce utilization.S imilarly, y ou may base-line the SQL S er v er workload using the SQL P r ofiler tool,which can help y ou to understandthe average resour ce utilization and execution time of SQL quer ies when conditions ar estable.Y ou will lear n in detail ho w to use these tools in Chapters2and3.Where to Focus EffortsWhen y ou tune a par ticular system,pay special attention to the application lay er(the data-base quer ies and stor ed pr ocedures executed b y V isual B asic/ADO or other wise that ar e usedto access the database).Y ou will usually find that y ou can positively affect per for mance in the application lay er far mor e than if y ou spend an equal amount of time figur ing out ho w to tunethe har dware,oper ating system,or SQL S er v er configur ation.Although a proper configur ationof har dware,oper ating system,and SQL S er v er is essential for the best per for mance of a data-base application,these fields have standar diz ed so much that y ou usually need to spend onlya limited amount of time configuring them pr operly for per for mance.A pplication designissues such as quer y design and indexing str ategies,on the other hand,ar e applicationdependent. C onsequently,ther e is usually mor e to optimize in the application lay er than inthe har dware,oper ating system,or SQL S er v er configur ation.Thus,for a unit of time spent ineach ar ea,wor k in the application lay er usually yields the maximum per for mance benefit,asillustr ated in F igur e1-4.10Figure1-4.Ti me spent vs.per formance gainIn my exper ience,the gr eatest impr o v ement in database application per for mance can be obtained b y looking first at the area of application design,including logical/physical database design,quer y design,and index design.Su re,if y ou concentrate on har dware configur ation and upgrades, y ou may obtain a satis- factor y per for mance gain.H o w e ver,a bad SQL quer y sent b y the application can consume all the har dware resour ces av ailable,no matter ho w much y ou have.Therefor e,a poor applica-tion design can make the har dware upgr ade requir ements ver y high,or even bey ond y ourlimits.I n the pr esence of a heavy SQL workload,concentr ating on har dware configur ationsand upgrades usually pr oduces a poor r etur n on investment.Y ou should analyz e the str ess cr eated b y an application on a SQL S er v er database at two levels:•H igh lev el:Analyz e ho w much str ess the database application is creating on individualhar dware resour ces and what the o v er all behavior of the SQL S er v er installation is.Thisinfor mation can help y ou in two ways.F irst,it helps y ou to identify the area to concen-tr ate on within a SQL S er v er application where ther e is poor per for mance.S econd,ithelps y ou to identify any lack of proper configur ation at the higher levels.Y ou can thendecide which har dware resour ce may be upgraded,if y ou ar e not able to tune the appli-cation,using the P er for mance M onitor tool,as explained in Chapter2.•Lo w lev el:I dentify the exact culpr its within the application—in other wor ds,the SQLquer ies that ar e creating most of the pr essure visible at the o v er all higher level.This canbe done using the SQL P r ofiler tool,as explained in Chapter3.11 SQL Ser ver P erformance KillersLet’s no w consider the major pr oblem ar eas that can degr ade SQL S er v er per for mance.By being awar e of the main per for mance killers in SQL S er ver in adv ance, y ou will be ableto focus y our tuning effor ts on the likely causes.Once y ou have optimiz ed the har dware,oper ating system,and SQL S er v er settings,the main per for mance killers in SQL S er v er ar e as follows,in a rough or der(with the worstappear ing first):•P oor indexing•I naccurate statistics•Ex cessive blocking and deadlocks•P oor quer y design•P oor database design•Ex cessive fr agmentation•N onr eusable execution plans•Fr equent recompilation of execution plans•I mproper use of cursors•I mproper configur ation of the database log•I neffective connection poolingLet’s take a quick look at each of these,befor e consider ing them in mor e depth in laterchapters.P oor I ndexingP oor indexing is usually one of the biggest per for mance killers in SQL S er v er.I n the absenceof proper indexing for a quer y,SQL S er v er has to r etr ieve and pr ocess much mor e data while executing the quer y.This causes high amounts of str ess on the disk,memor y,and CPU,incr easing the quer y execution time significantly.I ncr eased quer y execution time then leadsto ex cessive blocking and deadlocks in SQL S er v er.Y ou will lear n ho w to determine the index-ing str ategies and r esolve indexing pr oblems in Chapters4,5,and6.Gener ally,indexes ar e consider ed to be the r esponsibility of the database administr ator (DBA).H o w e ver,the DBA cannot define ho w to use the indexes,since the use of indexes is determined b y the database quer ies and stor ed pr ocedures wr itten b y the developers.Ther e-for e,defining the indexes should be the r esponsibility of the developers.I ndexes cr eatedwithout the kno wledge of the quer ies ser ve little purpose.12NOTE Because indexes crea ted without the knowledge of the queries serve little purpose,databasedevelopers ought to understand the indexes as much as the DBAs.I naccurate S tatisticsAs SQL S er v er r elies heavily on cost-based optimization,accur ate data-distribution statisticsar e extremely impor tant for the effective use of indexes.W ithout accur ate statistics,SQLSe rv er’s built-in quer y optimizer cannot accur ately estimate the number of ro ws affected b y a quer y.As the amount of data to be r etr ieved fr om a table is highly impor tant in deciding ho wto optimize the quer y execution,the quer y optimizer is much less effective if the data distr i-bution statistics ar e not maintained accur ately.Y ou will look at ho w to analyz e statistics inChapter7.Ex cessiv e B locking and D eadlocksB ecause SQL S er v er is fully A tomicity,C onsistency,I solation,D u r ability(A CID)compliant,thedatabase engine ensur es that modifications made b y concurr ent tr ansactions ar e pr operlyisolated fr om one another.B y default,a tr ansaction sees the data either in the state befor eanother concurr ent tr ansaction modified the data or after the other tr ansaction completed—it does not see an intermediate state.B ecause of this isolation,when multiple tr ansactions tr y to access a common resour ceconcurr ently in a noncompatible way,blocking occurs in the database.A deadlock,which isan outcome of blocking,aborts the victimiz ed database r equest that faced the deadlock.This requires that the database r equest be r esubmitted for successful execution.The executiontime of a quer y is adversely affected b y the amount of blocking and deadlock it faces.F or scalable per for mance of a multiuser database application,pr operly contr olling theisolation levels and tr ansaction scopes of the quer ies to minimize blocking and deadlock iscr itical;other wise,the execution time of the quer ies will increase significantly,even thoughthe har dware resour ces may be highly under utiliz ed.I will cover this pr oblem in depth inChapters12and13.P oor Q uer y D esignThe effectiveness of indexes depends entir ely on the way y ou wr ite SQL quer ies.R etr ievingex cessively lar ge numbers of ro ws fr om a table,or specifying a filter criterion that r eturns alarger result set fr om a table than is required,r enders the indexes ineffective. T o impr o v e per- for mance, y ou must ensur e that the SQL quer ies ar e wr itten to make the best use of new orexisting indexes.F a iling to wr ite cost-effective SQL quer ies may pr event SQL S er v er fr omchoosing proper indexes,which increases quer y execution time and database blocking.Chapter11covers ho w to wr ite effective quer ies.Q uer y design covers not only single quer ies,but also sets of quer ies often used to implement database functionalities such as a queue management among queue readers and wr iters.E v enwhen the per for mance of individual quer ies used in the design is fine,the o v er all per for mance of the database can be ver y poor.R esolving this kind of bottleneck requires a broad understanding13 of differ ent char acter istics of SQL S er v er,which can affect the per for mance of database func-tionalities.Y ou will see ho w to design effective database functionality using SQL quer ies inChapter17.P oor D atabase D esignA database should be adequately nor maliz ed to increase the per for mance of data r etr iev aland r educe blocking.F or example,if y ou have an undernor maliz ed database with customerand or der infor mation in the same table,then the customer infor mation will be r epeated in allthe or der ro ws of the customer.This r epetition of infor mation in ever y ro w will increase theI/O s requir ed to fetch all the orders placed b y a customer.A t the same time,a data wr iterwor king on a customer’s or der will reser v e all the ro ws that include the customer infor mationand thus block all other data wr iters/data readers tr ying to access the customer pr ofile.Over nor malization of a database is as bad as undernor malization.Over nor malizationincreases the number and complexity of joins requir ed to r etr ieve data. An o v er nor maliz eddatabase contains a lar ge number of tables with a ver y small number of columns.As a ve r ygener al rule of thumb, y ou may continue the nor malization pr ocess unless it causes lots ofquer ies to have four-way or gr eater joins.Having too many joins in a quer y may also be due to the fact that database entities havenot been partitioned ver y distinctly or the quer y is ser ving a ver y complex set of requir ementsthat could perhaps be better ser ved b y creating a new view or stor ed pr ocedure.D atabase design is a lar ge subject,and I will not cover it any fur ther in this book.H o w ever,if y ou want to r ead a book on database design,with an emphasis on intr oducing the subject,I r ecommend reading D ata Modeling for E v er yone by S haron Allen(A pr ess,2003).Ex cessiv e F r agmentationWhile analyzing data r etr iev al oper ations, y ou can usually assume that the data is or ganiz ed inan or derly way,as indicated b y the index used b y the data r etr iev al oper ation.H o w ever,if thepages containing the data ar e fr agmented in a nonor derly fashion,or if they contain a smallamount of data due to fr equent page splits,then the number of r ead oper ations requir ed b y thedata r etr iev al operation will be much higher than might other wise be required.The increase inthe number of r ead oper ations caused b y fr agmentation hur ts quer y per for mance.I n Chapter8,y ou will lear n ho w to analyz e and re mo ve fr agmentation.N onr eusable Ex ecution P lansTo execute a quer y in an efficient way,SQL S er v er’s quer y optimizer spends a fair amount ofCPU cy cles creating a cost-effective execution plan.The good news is that the plan is cachedin memor y,so y ou can reuse it once cr eated.H o w e ver,if the plan is designed so that y o ucannot plug v a r i able v alues into it,SQL S er v er creates a new execution plan ever y time thesame quer y is r esubmitted with differ ent v a r i able v alues.S o,for better per for mance,it isextremely impor tant to submit SQL quer ies in for ms that help SQL S er v er cache and reuse theexecution plans.Y ou will see in detail ho w to impr o v e the r eusability of execution plans inChapter9.。