VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > sql数据库 >
  • sql语句大全之SQL SERVER 性能优化

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操作分为分页读和分页写。分页读采取预读、读取索引页、读取数据页和高级扫描,其中涉及的创新技术包括高速缓存预读机制、数据读取分析合并机制、数据索引引用机制和全表共享访问机制。
 
分页写分为逻辑写入和磁盘写入,数据写入高速缓存时发生逻辑写入,数据由高速缓存写入磁盘时发生磁盘写入。写入的核心是维护逻辑写入和磁盘写入的一致性。写的过程包括形成脏数据和及时的事务日志、查找聚集写入页的脏数据、写入磁盘数据。写入磁盘数据包括惰性写入、勤奋写入和检查点写入,为了保证高效的操作,全部采用异步操作.
--------------------- 
作者:技术畅聊 
来源:CSDN 
原文:https://blog.csdn.net/sunhaidong886/article/details/78781971 
版权声明:本文为博主原创文章,转载请附上博文链接!

相关教程