-
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
版权声明:本文为博主原创文章,转载请附上博文链接!
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式