随笔分类 - 读书笔记
记录一些读书时的总结、体会等。
摘要:自调整的数据库引擎(Self-tuning Database Engine) 长期以来,微软都致力于自调整(Self-Tuning)的SQL Server数据库引擎,用以降低产品的总拥有成本。从SQL Server 2005开始,SQL Server就是动态管理内存使用,并且调整内存使用时,不需要重启数据库引擎。 所以它也不提供内存分配的微调项。各个组件的内存分配,完全由数据库引擎自动管理,不能手动分配。但是这货还是提供了一些配置项,能够影响数据库引擎如何使用内存。 是否使用这些配置项来替代默认值,取决于操作系统版本,SQL Server版本,可用物理内存和处理器架构等。 SQL Serve.
阅读全文
摘要:第三章 High CPU Utilization.CPU使用率过高的常见原因 查询优化器会尽量从CPU,IO和内存资源成本最小的角度,找到最高效的数据访问方式。如果没有正确的索引,或者写的语句本身就会忽略索引, 又或者不准确的统计信息等情况下,查询计划可能不是最优的。 有些查询计划可能对只对某种条件下的查询是高效,而不是所有条件下都是。缺失索引 索引的缺失,会导致查询处理的行数大大超出必要的行数,从而加重CPU和IO的负载。简单的例子:SELECT per .FirstName , per.LastName , p.Name , p.Pro...
阅读全文
摘要:第三章 High CPU Utilization.CPU使用率过高问题很容易被发现,但是诊断却不是很容易。CPU使用过高很多时候会成为其它问题的替罪羊,所以在确认和故障诊断时要抽丝剥茧。调查CPU压力三个主要的工具:性能监视器,SQLTrace,DMV. 性能监视器:首先用它来确认是SQL Server还是其它进程使用了过多的CPU。主要计数器有: Processor/ %Privileged Time :在特权模式下进程线程执行代码所花时间的百分比。基本可以认为是Windows核心使用的CPU Processor/ %User Time :处理器处于用户模式的时间百分比。应用程序的使用的CP
阅读全文
摘要:第二章 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
阅读全文
摘要:第一章 A Performance Troubleshooting Methodology。 确定具体的方法论用于SQL Server故障诊断是件很难的事情。因为根据问题和环境的不同,解决方法也不一样。一个准确的故障诊断,不仅是收集各种信息,而且要明白它们的含义。千万不要只见树木不见森林。作者通过一个简单的诊断示例,演示基本的方法和借助的工具:1. 首先查看DMV sys.dm_os_wait_stats来确定操作系统层面的主要的资源等待。2. 假设发现主要等待类型为PAGEIOLATCH_SH。PAGEIOLATCH_SH发生的原因是磁盘子系统的速度不能满足DB对页的请求速度。 看起来是IO
阅读全文
摘要:数据页缓存是SQL Server的内存使用主要的方面,也是占用量最大的部分。在一个稳定的DB Server上,这部分内存使用会相对较稳定。SQL Server会把经常使用到的数据缓存在内存里(就是数据页缓存),用以提高数据访问速度。因为磁盘访问速度远远低于内存,所以减少磁盘访问量同样是数据库优化的重要方面。当数据页缓存区出现内存不足,则会出现查询慢,磁盘忙等等问题。分析方法:主要是用到性能计数器。 查看如下性能计数器: 1. SQL SERVER:Buffer Manager-Lazy Writes/sec:内存不足则会频繁调用Lazy Writer把数数据写入磁盘,此值会经常不为0. 2.
阅读全文
摘要:行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现。在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过。为了加深认识,再总结一次。行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列)。--创建测试环境USE tempdb;GOIF OBJECT_ID('dbo.Orders') IS NOT NULL DROP TABLE dbo.Orders;GOCREATE TABLE dbo.Orders( orderid int NOT...
阅读全文
摘要:对于CPU利用的分析,着重在考察CPU瓶颈,编译和反编译。 1.CPU瓶颈 可以通观察PERFMON中的Processor:% Processor Time计数器,来确定是否存在硬性的瓶颈。如果值一值偏高(大于80%),则可以认为需要提升CPU性能了。 也可以通查询DMV:sys.dm_os_sch
阅读全文
摘要:并发和事务 并发可以理解为多个进程同时访问和修改同一数据(或共享数据)的能力和行为。 数据库系统一般采用两种方式来管理并发:悲观并发控制和乐观并发控制。SqlServer2005之前的版本只支持悲观并发控制。 两者的区别在于是在并发冲突发生之前进行预防还是在并发冲突发生后进行处理。 悲观并发控制:
阅读全文
摘要:看了数据修改一节,记录一下。以前为了动态返回sp或批处理的结果,做为下一步处理的中继数据,总是使用临时表和openQuery来实现。有时还实现不了,比如需要指定参数的sp.其实有INSERT EXEC很好解决我的这些困扰。Insert Exec 语句可以把存储过程或动态批处理返回的结果集直接保存到现有表中:INSERT INTO EXEC { | ()};ex: INSERT INTO DBO.Result EXEC DBO.USP_MYSP @Parm1='A',@Parm2='B'删除数据只知道TRUNCATE和无WHERE DELETE区别。TRUNCAT
阅读全文
摘要:USE tempdb;GOIFOBJECT_ID('dbo.Groups') ISNOTNULL DROPTABLE dbo.Groups;GOCREATETABLE dbo.Groups( groupid VARCHAR(10) NOTNULL, memberid INTNOTNULL, string VARCHAR(10) NOTNULL, val INTNOTNULL, PRIMARYKEY (groupid, memberid)); INSERTINTO dbo.Groups(groupid, memberid, string, val) VALUE...
阅读全文

浙公网安备 33010602011771号