随笔分类 -  SQLSERVER性能调优

1
摘要:如何让SQL Server像MySQL一样拥有慢查询日志(Slow Query Log慢日志) SQL Server一直以来被人诟病的一个问题是缺少了像MySQL的慢日志功能,程序员和运维无法知道数据库过去历史的慢查询语句。 因为SQLServer默认是不捕获过去历史的长时间阻塞的SQL语句,导致大 阅读全文
posted @ 2024-07-28 08:00 桦仔 阅读(187) 评论(1) 推荐(2) 编辑
摘要:由delete语句引起的锁范围扩大 阿里云月报中的一句话,出处:http://mysql.taobao.org/monthly/2022/01/01/ 但是Ghost Record是可以跟正常的Record一样作为Key Range Lock的加锁对象的。可以看出这相当于把删除操作变成了更新操作,因 阅读全文
posted @ 2024-07-24 08:00 桦仔 阅读(1594) 评论(2) 推荐(4) 编辑
摘要:SQL Server的Descending Indexes降序索引 1、建立测试环境 测试环境:SQL Server 2012 表结构如下 USE [test] GO CREATE TABLE [dbo].[tt8]( [id] INT IDENTITY(1,1) NOT NULL, [win_nu 阅读全文
posted @ 2019-04-29 15:23 桦仔 阅读(3432) 评论(0) 推荐(2) 编辑
摘要:SQL Server 2014内存优化表的使用场景 最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题 大家知道,内存优化表作为In-Memory OLTP功能是从SQL Server 2014开始引入,用来对抗Oracle 12C的In-Memory OLTP选件 不过SQL Serv 阅读全文
posted @ 2017-01-24 13:02 桦仔 阅读(7494) 评论(4) 推荐(48) 编辑
摘要:禁用nested loop join里的spool 转载自: https://blogs.msdn.microsoft.com/psssql/2015/12/15/spool-operator-and-trace-flag-8690/ https://answers.sqlperformance.c 阅读全文
posted @ 2015-12-15 21:47 桦仔 阅读(641) 评论(2) 推荐(0) 编辑
摘要:数据库的读读事务也会产生死锁前段时间有朋友问:SQL Server的AlwaysOn的辅助数据库默认会使用行版本快照控制来消除数据库上的读写事务阻塞和死锁问题即使用户显式为查询设置了其他事务隔离级别,所有锁提示(Lock Hint)都会被忽略。为了保证数据同步的完整性,AlwaysOn规定来自数据同... 阅读全文
posted @ 2015-08-24 10:31 桦仔 阅读(4329) 评论(3) 推荐(3) 编辑
摘要:SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享 第一步建库和建表 第二步创建sp_who3存储过程 -- http://sqlserverplanet.com/dba/a-better-sp_who2-using-dmvs-sp_who3 USE [MonitorElapsedH 阅读全文
posted @ 2015-06-19 10:37 桦仔 阅读(5432) 评论(11) 推荐(10) 编辑
摘要:SQL Server 连接问题案例解析(1)转载自:http://blogs.msdn.com/b/apgcdsd/archive/2015/04/27/sql.aspx?CommentPosted=true#commentmessage Microsoft Network Monitor(Netm... 阅读全文
posted @ 2015-04-28 17:32 桦仔 阅读(1607) 评论(4) 推荐(0) 编辑
摘要:SQLSERVER中如何忽略索引提示 当我们想让某条查询语句利用某个索引的时候,我们一般会在查询语句里加索引提示,就像这样 当在生产环境里面,由于这个索引提示的原因,优化器一般不会再去考虑其他的索引,那有时候这个索引提示可能会导致查询变慢 经过你的测试,发现确实是因为这个索引提示的关系导致查询变慢, 阅读全文
posted @ 2014-11-10 14:39 桦仔 阅读(2487) 评论(0) 推荐(3) 编辑
摘要:记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?)前几天帮客户优化一个数据库,那个数据库的大小是6G这麽小的数据库按道理不会有太大的性能问题的,但是客户反应说CPU占用很高,经常达到80%~90%我检查了任务管理器,确实是SQLSERVER占的CP... 阅读全文
posted @ 2014-06-04 23:08 桦仔 阅读(9886) 评论(14) 推荐(6) 编辑
摘要:SQLSERVER 数据库性能的基本很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据库服务器做数据库服务器的那台服务器性能要相对较好,磁盘,内存,CPU等等,那么在选用其中某一台服务器作为数据库服务器之前需要测试每一台服务器的性能并且需要设置一些硬件的参数,例如设置磁盘控制器的参数,参考文章:Writeback和Writethrough区别那么具体怎麽测试呢?怎麽得出测试指标呢?大家可以参考这篇文章:SQL Server Database Engine Performance Tun 阅读全文
posted @ 2014-03-26 17:37 桦仔 阅读(20851) 评论(36) 推荐(21) 编辑
摘要:SQLSERVER:PREEMPTIVE_OS_GETPROCADDRESS等待类型的困惑翻译自:http://troubleshootingsql.com/2011/07/20/preemptive_os_getprocaddress-are-you-confusing-me/PREEMPTIVE_OS_GETPROCADDRESS等待类型在SQLSERVER2008里是一个新的等待类型这个等待类型的作用是当GetProcAddress跟踪SQLSERVER实例调用扩展存储过程的时候加载DLL的入口点所花费的时间然而,这个等待类型跟踪这个等待时间的方式有一些问题,这个问题在Rob Dorr的 阅读全文
posted @ 2013-11-23 12:54 桦仔 阅读(1654) 评论(0) 推荐(2) 编辑
摘要:固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异 在看这篇文章之前可以先看一下下面的文章: SSD小白用户收货!SSD的误区如何解决 这样配会损失性能?实测6种特殊装机方式 听说固态硬盘是高富帅的必备神器,本人为了提升工作效率和提高工作速度 这个月节衣缩食,终于也决定买了一块三星固 阅读全文
posted @ 2013-10-31 13:18 桦仔 阅读(15985) 评论(48) 推荐(12) 编辑
摘要:SQLSERVER 里SELECT COUNT(1) 和SELECT COUNT(*)哪个性能好?今天遇到某人在我以前写的一篇文章里问到如果统计信息没来得及更新的话,那岂不是统计出来的数据时错误的了这篇文章的地址:SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第三篇)之前我以为SELE... 阅读全文
posted @ 2013-10-18 20:38 桦仔 阅读(24485) 评论(16) 推荐(9) 编辑
摘要:Select * 一定不走索引是否正确?走索引指的是:SQL语句的执行计划用到了1、聚集索引查找 2、索引查找 ,并且查询语句中需要有where子句根据where子句的过滤条件,去聚集索引或非聚集索引那里查找记录一张表只有一列的情况:聚集索引 1 USE [tempdb] 2 GO 3 CREATE TABLE t1 ( id INT ) 4 GO 5 CREATE CLUSTERED INDEX CIX_T1 ON [dbo].[t1](ID ASC) 6 GO 7 8 9 DECLARE @I INT10 SET @I = 111 WHILE @I < 1000 12 BEGI... 阅读全文
posted @ 2013-08-30 19:52 桦仔 阅读(14623) 评论(20) 推荐(8) 编辑
摘要:SQLSERVER执行时间统计工具SQLQueryStress有时候需要检测一下SQL语句的执行时间,相信大家都会用SET STATISTICS TIME ON开关打开SQLSERVER内置的时间统计1 SET STATISTICS TIME ON不过这款小工具的统计信息比SQLSERVER内置的多一些,设置选项也多一些我看到这款小工具用C#来写的,可惜不是国内的朋友做的官网:http://www.mssqltips.com/sqlservertip/2730/sql-query-stress-tool/使用文档 :http://www.datamanipulation.net/sqlquer 阅读全文
posted @ 2013-07-13 13:01 桦仔 阅读(11774) 评论(4) 推荐(6) 编辑
摘要:何谓SQLSERVER参数嗅探大家听到“嗅探”这个词应该会觉得跟黑客肯定有关系吧,使用工具嗅探一下参数,然后截获,脱裤o(∩_∩)o 。事实上,我觉得大家太敏感了,其实这篇文章跟数据库安全没有什么关系,实际上跟数据库性能调优有关相信大家有泡SQLSERVER论坛的话不多不少应该都会见过“参数嗅探”这几个字这里有三篇帖子都是讲述参数嗅探的http://social.msdn.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/caccb7f3-8366-4954-8f8a-145eb6bca9ddhttp://msdn.microsoft.com/z 阅读全文
posted @ 2013-03-02 23:58 桦仔 阅读(16029) 评论(5) 推荐(11) 编辑
摘要:SQLSERVER编译与重编译编译的含义当SQLSERVER收到任何一个指令,包括查询(query)、批处理(batch)、存储过程、触发器(trigger)、预编译指令(prepared statement)和动态SQL语句(dynamic SQL Statement)要完成语法解释、语句解释,然后再进行“编译(compile)”,生成能够运行的“执行计划(execution plan)”。在编译的过程中,SQLSERVER会根据所涉及的对象的架构(schema)、统计信息以及指令的具体内容,估算可能的执行计划,以及他们的成本(cost),最后选择一个SQLSERVER认为成本最低的执行计划 阅读全文
posted @ 2013-01-17 21:59 桦仔 阅读(7710) 评论(2) 推荐(1) 编辑
摘要:在SQL语句调优的时候,大部分都会查看语句执行时间,究竟SQLSERVER显示出来的统计结果是什么意思?下面看一下例子比较简单的语句:1 SET STATISTICS TIME ON2 USE [pratice]3 GO4 SELECT * FROM [dbo].[Orders]结果: 1 SQL Server 分析和编译时间: 2 CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 3 4 SQL Server 执行时间: 5 CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 6 7 SQL Server 执行时间: 8 CPU 时间 = 0 毫秒,占用时间 =... 阅读全文
posted @ 2012-12-17 23:55 桦仔 阅读(8953) 评论(0) 推荐(3) 编辑
摘要:要影响SQLSERVER锁的申请和释放行为要考虑的因素1、事务隔离级别的选定事务隔离级别越高,隔离度就越高,并发度也就越差。如果选择了比较高的隔离级别,SQL不可避免地要申请更多的锁,持有的时间也会增加。所以在设计应用的时候,一定要和用户谈好,尽量选择默认的隔离级别(read committed)2、事务的长短和事务的复杂度事务的长度和复杂度决定论这个事务在SQL内部会持续多长时间,也能决定SQL会同时在多少张表和索引上申请和持有锁。事务越简单,就越不容易发生阻塞和死锁。所以这也必须和用户商量好,尽量避免在一个事务里做很多事情3、从应用整体并发度考虑,单个事务一次处理的数据量不能过多应用的性能 阅读全文
posted @ 2012-11-25 11:57 桦仔 阅读(1025) 评论(0) 推荐(0) 编辑

1