SQL SERVER 性能优化
2017-12-12 15:01
232 查看
1、性能指标监控
1)打开perfmon.exe性能监视器
2)添加性能指标
Memory: Available Mbytes
Memory: Pages/sec
Paging File:%Usage
SQL Server: Buffer Manager: Buffer cache hit
SQL Server: Buffer Manager: Page life expectancy
SQL Server: Memory Manager: Memory Grants Pending
3)数据分析
在本文中,再次使用了可靠性和性能监视器这个工具。为了获取内存相关的性能计数器,需要在图形化界面中观察这些计数器。
首先先检查Memory: Available Mbytes,这个值意味着系统的可用内存。如果发现这个值经常很低,可能表示服务器内存不足,在生产数据库中,这个值可以使用GB为单位。
然后检查Memory: Pages/sec ,以为这因为硬页面错误导致的从磁盘读或写页面。这个值如果长期高于20,意味着内存不足使得应用程序使用虚拟内存,从而导致挂起。
接着是Memory: pages/sec ,同时也要检查Paging File:%Usage去预估内存挂起。如果这个值经常超过20%,可能意味着内存不足。
SQL Server: Buffer Manager: Buffer cache hit ratio:意味着数据从缓存中读取的次数,比较合理的值为大于90%。如果该值很低,可能内存不足或者需要检查索引和查询。如果你需要获得大量数据,这一步可能就会占用大量内存然后引起SQLServer从磁盘读数据而不是从内存。检查索引,确保在大表中能尽可能笔描扫描。并尽可能限制查询返回的结果行。
检查SQL Server: Buffer Manager: Page life expectancy,表示数据页驻留在内存的秒数。微软建议最少300秒。如果在一个实例中经常低于300秒,意味着数据保留的时间少于5分钟就被移出内存。
如果SQL Server: Memory Manager: Memory Grants Pending经常建议等待进程,你可能需要增加服务器的内存了。
2、设置SQLSERVER 的最大使用内存,并重启sqlserver服务器,从而使得数据库使用的内存超过最大设置内存时,自动实现内存回收。
由于当前数据库服务器的内存是16G,为其他程序预留了4G的程序,所以数据库的最大使用程序设置为12G
3、查看连接数
select * from sysprocesses where dbid in (select dbid from sysdatabases where name='MyDatabase')
查看连接数,通过连接数的分析确定数据库的链接程序是否正确。如果连接数过多,资源得不到释放,说明有问题。
4、查看等待类型
SELECT TOP 10 * FROM SYS.dm_os_wait_stats ORDER BY wait_time_ms DESC
分析:通过等待类型,分析SQLSERVER 的耗时操作存在的类型:
SELECT
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB, (locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB, process_physical_memory_low, process_virtual_memory_low FROM sys.dm_os_process_memory;
查看sqlserver的内存结构,通过内存结构分析SQLServer的内存情况
5、查看耗时SQL
SELECT SS.SUM_EXECUTION_COUNT,
T.TEXT,
SS.SUM_TOTAL_ELAPSED_TIME,
SS.SUM_TOTAL_WORKER_TIME,
SS.SUM_TOTAL_LOGICAL_READS,
SS.SUM_TOTAL_LOGICAL_WRITES
FROM (SELECT S.PLAN_HANDLE,
SUM(S.EXECUTION_COUNT)SUM_EXECUTION_COUNT,
SUM(S.TOTAL_ELAPSED_TIME)SUM_TOTAL_ELAPSED_TIME,
SUM(S.TOTAL_WORKER_TIME)SUM_TOTAL_WORKER_TIME,
SUM(S.TOTAL_LOGICAL_READS)SUM_TOTAL_LOGICAL_READS,
SUM(S.TOTAL_LOGICAL_WRITES)SUM_TOTAL_LOGICAL_WRITES
FROM SYS.DM_EXEC_QUERY_STATS S
GROUP BY S.PLAN_HANDLE
) AS SS
CROSS APPLY SYS.dm_exec_sql_text(SS.PLAN_HANDLE)T
ORDER BY SUM_TOTAL_LOGICAL_READS DESC
通过此语句可以查看耗时的SQL语句,根据SQL优化的规则进行针对性的SQL优化。另,SQLSERVER的性能杀手:
1)低质量的索引
2)不精确的统计
3)过多的阻塞和死锁
4)低质量的查询涉及
总结:
SQLSERVER 的性能优化是一个复杂的过程,其中的核心关键包括三个:1)减少全表检索的次数 2)减少数据获取的数量3)尽可能的采用线程池实现数据库链接,并及时的关闭数据链接,方式内存溢出.当发现瓶颈后,针对性的优化算法或者硬件吞吐量做出针对性的扩展.
知识扩展
SQLser的内存管理
SQL Server的内存管理设计的原则:1)减少磁盘读取和写入IO次数 2)减少数据检索的时间。数据的内存管理机制采用页式管理机制,分为数据页和检索页。相应的内存的索引分为聚集索引和非聚集索引,聚集索引与数据的存储相关,而非聚集索引与索引页相关与存储无关。数据库的IO操作分为分页读和分页写。分页读采取预读、读取索引页、读取数据页和高级扫描,其中涉及的创新技术包括高速缓存预读机制、数据读取分析合并机制、数据索引引用机制和全表共享访问机制。
分页写分为逻辑写入和磁盘写入,数据写入高速缓存时发生逻辑写入,数据由高速缓存写入磁盘时发生磁盘写入。写入的核心是维护逻辑写入和磁盘写入的一致性。写的过程包括形成脏数据和及时的事务日志、查找聚集写入页的脏数据、写入磁盘数据。写入磁盘数据包括惰性写入、勤奋写入和检查点写入,为了保证高效的操作,全部采用异步操作.
1)打开perfmon.exe性能监视器
2)添加性能指标
Memory: Available Mbytes
Memory: Pages/sec
Paging File:%Usage
SQL Server: Buffer Manager: Buffer cache hit
SQL Server: Buffer Manager: Page life expectancy
SQL Server: Memory Manager: Memory Grants Pending
3)数据分析
在本文中,再次使用了可靠性和性能监视器这个工具。为了获取内存相关的性能计数器,需要在图形化界面中观察这些计数器。
首先先检查Memory: Available Mbytes,这个值意味着系统的可用内存。如果发现这个值经常很低,可能表示服务器内存不足,在生产数据库中,这个值可以使用GB为单位。
然后检查Memory: Pages/sec ,以为这因为硬页面错误导致的从磁盘读或写页面。这个值如果长期高于20,意味着内存不足使得应用程序使用虚拟内存,从而导致挂起。
接着是Memory: pages/sec ,同时也要检查Paging File:%Usage去预估内存挂起。如果这个值经常超过20%,可能意味着内存不足。
SQL Server: Buffer Manager: Buffer cache hit ratio:意味着数据从缓存中读取的次数,比较合理的值为大于90%。如果该值很低,可能内存不足或者需要检查索引和查询。如果你需要获得大量数据,这一步可能就会占用大量内存然后引起SQLServer从磁盘读数据而不是从内存。检查索引,确保在大表中能尽可能笔描扫描。并尽可能限制查询返回的结果行。
检查SQL Server: Buffer Manager: Page life expectancy,表示数据页驻留在内存的秒数。微软建议最少300秒。如果在一个实例中经常低于300秒,意味着数据保留的时间少于5分钟就被移出内存。
如果SQL Server: Memory Manager: Memory Grants Pending经常建议等待进程,你可能需要增加服务器的内存了。
2、设置SQLSERVER 的最大使用内存,并重启sqlserver服务器,从而使得数据库使用的内存超过最大设置内存时,自动实现内存回收。
由于当前数据库服务器的内存是16G,为其他程序预留了4G的程序,所以数据库的最大使用程序设置为12G
3、查看连接数
select * from sysprocesses where dbid in (select dbid from sysdatabases where name='MyDatabase')
查看连接数,通过连接数的分析确定数据库的链接程序是否正确。如果连接数过多,资源得不到释放,说明有问题。
4、查看等待类型
SELECT TOP 10 * FROM SYS.dm_os_wait_stats ORDER BY wait_time_ms DESC
分析:通过等待类型,分析SQLSERVER 的耗时操作存在的类型:
SELECT
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB, (locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB, process_physical_memory_low, process_virtual_memory_low FROM sys.dm_os_process_memory;
查看sqlserver的内存结构,通过内存结构分析SQLServer的内存情况
5、查看耗时SQL
SELECT SS.SUM_EXECUTION_COUNT,
T.TEXT,
SS.SUM_TOTAL_ELAPSED_TIME,
SS.SUM_TOTAL_WORKER_TIME,
SS.SUM_TOTAL_LOGICAL_READS,
SS.SUM_TOTAL_LOGICAL_WRITES
FROM (SELECT S.PLAN_HANDLE,
SUM(S.EXECUTION_COUNT)SUM_EXECUTION_COUNT,
SUM(S.TOTAL_ELAPSED_TIME)SUM_TOTAL_ELAPSED_TIME,
SUM(S.TOTAL_WORKER_TIME)SUM_TOTAL_WORKER_TIME,
SUM(S.TOTAL_LOGICAL_READS)SUM_TOTAL_LOGICAL_READS,
SUM(S.TOTAL_LOGICAL_WRITES)SUM_TOTAL_LOGICAL_WRITES
FROM SYS.DM_EXEC_QUERY_STATS S
GROUP BY S.PLAN_HANDLE
) AS SS
CROSS APPLY SYS.dm_exec_sql_text(SS.PLAN_HANDLE)T
ORDER BY SUM_TOTAL_LOGICAL_READS DESC
通过此语句可以查看耗时的SQL语句,根据SQL优化的规则进行针对性的SQL优化。另,SQLSERVER的性能杀手:
1)低质量的索引
2)不精确的统计
3)过多的阻塞和死锁
4)低质量的查询涉及
总结:
SQLSERVER 的性能优化是一个复杂的过程,其中的核心关键包括三个:1)减少全表检索的次数 2)减少数据获取的数量3)尽可能的采用线程池实现数据库链接,并及时的关闭数据链接,方式内存溢出.当发现瓶颈后,针对性的优化算法或者硬件吞吐量做出针对性的扩展.
知识扩展
SQLser的内存管理
SQL Server的内存管理设计的原则:1)减少磁盘读取和写入IO次数 2)减少数据检索的时间。数据的内存管理机制采用页式管理机制,分为数据页和检索页。相应的内存的索引分为聚集索引和非聚集索引,聚集索引与数据的存储相关,而非聚集索引与索引页相关与存储无关。数据库的IO操作分为分页读和分页写。分页读采取预读、读取索引页、读取数据页和高级扫描,其中涉及的创新技术包括高速缓存预读机制、数据读取分析合并机制、数据索引引用机制和全表共享访问机制。
分页写分为逻辑写入和磁盘写入,数据写入高速缓存时发生逻辑写入,数据由高速缓存写入磁盘时发生磁盘写入。写入的核心是维护逻辑写入和磁盘写入的一致性。写的过程包括形成脏数据和及时的事务日志、查找聚集写入页的脏数据、写入磁盘数据。写入磁盘数据包括惰性写入、勤奋写入和检查点写入,为了保证高效的操作,全部采用异步操作.
相关文章推荐
- SQL Server现场优化纪实(二):通过重建索引提高性能
- SQL Server 性能优化之RML Utilities:快速入门(Quick Start)
- 承接SQL SERVER性能优化培训
- [翻译]10步骤优化SQL Server 数据库性能(大致翻了下)
- Sql Server查询性能优化之创建合理的索引(上篇)
- sql server 存储过程的优化:简单测试在存储过程中临时表与union all的性能差别
- SQL Server 查询性能优化——创建索引原则(一)
- Sql Server 性能优化之包含列
- SQL Server 性能工具(SQL Server Profiler和数据库引擎优化顾问)使用方法详解
- 通过内存配置来优化SQL Server的性能
- SQL Server 性能优化之——T-SQL NOT IN 和 NOT Exists
- SQL Server 数据库性能优化
- SQL Server 数据库性能优化
- Sql Server查询性能优化之不可小觑的书签查找介绍
- sql server 2008 性能优化
- SQL SERVER性能优化综述
- SQL Server 查询性能优化——创建索引原则(一)
- SQL SERVER性能优化综述(转自http://blog.csdn.net/Haiwer/archive/2008/08/25/2826881.aspx)
- Sql Server CPU 性能排查及优化的相关 Sql
- SQL Server性能优化与管理的艺术 附件下载地址