摘要: 第三章 High CPU Utilization.CPU使用率过高的常见原因 查询优化器会尽量从CPU,IO和内存资源成本最小的角度,找到最高效的数据访问方式。如果没有正确的索引,或者写的语句本身就会忽略索引, 又或者不准确的统计信息等情况下,查询计划可能不是最优的。 有些查询计划可能对只对某种条件下的查询是高效,而不是所有条件下都是。缺失索引 索引的缺失,会导致查询处理的行数大大超出必要的行数,从而加重CPU和IO的负载。简单的例子:SELECT per .FirstName , per.LastName , p.Name , p.Pro... 阅读全文
posted @ 2013-08-16 00:53 Joe.TJ 阅读(3503) 评论(3) 推荐(2) 编辑
摘要: 第三章 High CPU Utilization.CPU使用率过高问题很容易被发现,但是诊断却不是很容易。CPU使用过高很多时候会成为其它问题的替罪羊,所以在确认和故障诊断时要抽丝剥茧。调查CPU压力三个主要的工具:性能监视器,SQLTrace,DMV. 性能监视器:首先用它来确认是SQL Server还是其它进程使用了过多的CPU。主要计数器有: Processor/ %Privileged Time :在特权模式下进程线程执行代码所花时间的百分比。基本可以认为是Windows核心使用的CPU Processor/ %User Time :处理器处于用户模式的时间百分比。应用程序的使用的CP 阅读全文
posted @ 2013-07-16 15:32 Joe.TJ 阅读(3119) 评论(0) 推荐(3) 编辑
摘要: 当实例没有做DDL Trigger和其它一些监控时,如何知道谁删除了某个表?通过系统函数fn_dblog,fn_dump_dblog和默认跟踪可以找到。1. 创建测试环境:新建个表,插入一条数据,然后drop掉CREATE DATABASE testgoUSE testgoCREATE TABLE dbo.fnlog_test(id INT IDENTITY ,val VARCHAR(10) DEFAULT 'x')GOCREATE CLUSTERED INDEX IX_ft_idON dbo.fnlog_test (ID) GOINSERT INTO dbo.fnlog_te 阅读全文
posted @ 2013-07-15 16:46 Joe.TJ 阅读(4026) 评论(9) 推荐(5) 编辑
摘要: 第二章 Disk I/O Configuration。对于SQL Server,磁盘I/O的配置主要针对数据库工作负载,考虑和权衡两个点: 1. 磁盘容量VS磁盘吞吐量 一个1TB的库放在一块2TB的磁盘上,容量是够了,但是磁盘吞吐量能满足工作负载吗?通常会使用RAID,合适的RAID级别也是容量与吞吐量权衡的一种结果。 2. 顺序IO VS. 随机I/O 数据库日志文件操作通常是顺序IO,数据文件通常随机IO会多很多。而磁盘的顺序IO性能要高于随机IO,因为前者需要移动磁头,后者不需要。 以工作负载不同的IO方式在存储上对数据库做隔离就很重要了。选择正确的RAID级别(Chose the r 阅读全文
posted @ 2013-05-23 11:50 Joe.TJ 阅读(1712) 评论(3) 推荐(4) 编辑
摘要: 第一章 A Performance Troubleshooting Methodology。 确定具体的方法论用于SQL Server故障诊断是件很难的事情。因为根据问题和环境的不同,解决方法也不一样。一个准确的故障诊断,不仅是收集各种信息,而且要明白它们的含义。千万不要只见树木不见森林。作者通过一个简单的诊断示例,演示基本的方法和借助的工具:1. 首先查看DMV sys.dm_os_wait_stats来确定操作系统层面的主要的资源等待。2. 假设发现主要等待类型为PAGEIOLATCH_SH。PAGEIOLATCH_SH发生的原因是磁盘子系统的速度不能满足DB对页的请求速度。 看起来是IO 阅读全文
posted @ 2013-05-15 17:09 Joe.TJ 阅读(1950) 评论(0) 推荐(1) 编辑
摘要: 在与朋友们聊到怎么让SQL Server的性能更好时,发现一些问题。对于SQL Server,除了遵循OS和应用程序的最佳实践外,还有哪些优化方法?硬件级别的优化同样也很重要,特别是存储的优化。聊完这些,我们开始从DBA的角度去解释SAN的问题。有许多的因素影响着磁盘的IO性能,比如共用或专用磁盘,RAID级别,总线速度,HBA的配置等。还有一个重要的但经常被忽略的因素:磁盘分区对齐(alignment in disk partitions).还有一些非磁盘因素,也可能出现瓶颈: -HBA和网卡 -FC的处理能力和iSCSI端口 -服务器和存储的路径数 -交换机了解和考虑架构中相关组件的限制是 阅读全文
posted @ 2013-05-10 17:07 Joe.TJ 阅读(1230) 评论(1) 推荐(2) 编辑
摘要: 某一个镜像会话中的主库所在服务器磁盘容量不足了,现要新添加一个磁盘分区用于扩容。通常的做法是:加完分区后,添加新数据文件(或者新文件组)到新分区,之后再重做镜像。如果此库比较大,则重做镜像会是件耗时和拖累性能的事情。会不会有更好的方法呢?在实际操作中,我以”数据库文件布局方式”分为三种情况:1. 主库和镜像库的文件布局一样,而且新增加分区盘符在两台机上都存在。 “一样”指mdf/ndf和ldf文件目录地址相同。在创建镜像时,还原数据库未指定“MOVE”则会一样。如主库包含C:\DB_Test\Mirror_test_data.mdf和C:\DB_Test\Mirror_test_log.ldf 阅读全文
posted @ 2013-04-08 18:26 Joe.TJ 阅读(1539) 评论(2) 推荐(1) 编辑
摘要: 有时候会查询一下实例下所有数据库文件的可用空间,SSMS上没有汇总的地方,仪表盘又只日志文件的可用空间,于是写了一个SP自己用./** author:Joe.TJ date:20130328 desc:get the free space of database file**/create proc usp_GetFreeSpaceasset nocount on;declare csr cursor for select name from sys.databases where database_id>4;declare @cmd varchar(2000);declare @db 阅读全文
posted @ 2013-03-28 15:07 Joe.TJ 阅读(550) 评论(0) 推荐(0) 编辑
摘要: 最近新建立了多个热备镜像,于是把如何管理和监控镜像的认识总结一下。镜像在建立好之后,就需要去管理其运行状况。最重要是性能状况评估和关键指标的自动监控警报。 1. 首先我们要获取镜像状态的信息,才能做出判断或者监控。要获取这些信息,就要了解两个重要的镜像监控组件:数据库镜像状态表和数据库监控作业。 1 阅读全文
posted @ 2012-09-06 12:27 Joe.TJ 阅读(3729) 评论(3) 推荐(7) 编辑
摘要: 数据页缓存是SQL Server的内存使用主要的方面,也是占用量最大的部分。在一个稳定的DB Server上,这部分内存使用会相对较稳定。SQL Server会把经常使用到的数据缓存在内存里(就是数据页缓存),用以提高数据访问速度。因为磁盘访问速度远远低于内存,所以减少磁盘访问量同样是数据库优化的重要方面。当数据页缓存区出现内存不足,则会出现查询慢,磁盘忙等等问题。分析方法:主要是用到性能计数器。 查看如下性能计数器: 1. SQL SERVER:Buffer Manager-Lazy Writes/sec:内存不足则会频繁调用Lazy Writer把数数据写入磁盘,此值会经常不为0. 2. 阅读全文
posted @ 2012-07-31 16:33 Joe.TJ 阅读(2345) 评论(2) 推荐(1) 编辑