2011年12月29日
摘要: Tempdb 系统数据库是一个全局资源,供连接到 SQL Server 实例的所有用户使用。在现在的SQL Server里,其使用频率可能会超过用户的想象。如果Tempdb空间耗尽,许多操作将不能完成。作为一个支持工程师,会被经常问到象“我的Tempdb为什么这么大?”“是谁把我的Tempdb空间用完的?”在SQL 2000的时候,这个问题很难回答。好在SQL 2005以后,引入了一张新的管理视图:sys.dm_db_file_space_usage。通过查询这张视图,能了解tempdb的空间使用情况,能知道tempdb的空间是被哪一块对象使用掉的,是用户对象(user_object_rese 阅读全文
posted @ 2011-12-29 15:24 xiaohuime 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 随着硬件能力的升级,以及软件应用的扩展,现在的数据库是越来越大了。回想10年前,一个上百GB的数据库就会把支持工程师吓得要命。而现在,上TB的数据库真是比比皆是。DBA遇到的一个常见问题,就是如何监视数据空间的增长情况,或者在数据库用满的时候,能够迅速定位谁是罪魁祸首。了解一个数据库空间使用的最简单方法,就是在Management Studio里,右键点击数据库名字,选择”Reports” – “Standard Reports”,缺省就有4个Disk Usage的报表。它们能很好地统计出了从不同角度分析的数据库空间使用情况。但是在一个非常繁忙的生产环境里,随随便便地跑UI的报表总是有点头皮发 阅读全文
posted @ 2011-12-29 15:05 xiaohuime 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 我曾经遇到过这样一个性能问题。一个客户反映,他的SQL Server会在某一段时间里,突然变得非常慢。最后他不得不重启SQL Server服务。而重启以后,问题就消失了。客户在出现问题的那段时间里,收集了主要的系统动态管理视图,以及性能监视器里和SQL Server有关的那些计数器。顺便说一句,这台服务器有16颗CPU。Sys.dm_exec_requests是检查SQL Server性能瓶颈的有力工具。在处理SQL Server性能问题的时候,它是第二个检查的对象。(第一个当然是SQL Server的日志文件,要确认Server当时没有异常。)从Sys.dm_exec_requests的结果 阅读全文
posted @ 2011-12-29 14:28 xiaohuime 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 最近较忙,很少出炉技术文章了。但最近听得很多的一句话就是update操作实际上就是先delete后insert的操作。对于这种提法,网上也比较普遍,但本人确不敢苟同。我们现在通过下面的几个case来看看究竟是不是那样的。我们会分3种情形来测试:1、更改非聚集索引键列字段,更改前后的长度一样;2、更改非聚集索引键列字段,更改后的长度比之前的大;3、更改聚集索引键列。下面先来创建两个表:create table t1(id int,col varchar(10))create unique clustered index IXCU_T1_ID on t1(id)gocreate table t2( 阅读全文
posted @ 2011-12-29 10:02 xiaohuime 阅读(1190) 评论(0) 推荐(0) 编辑
  2011年12月28日
摘要: 在分析SQL server 性能的时候你可能经常看到 PAGELATCH和PAGEIOLATCH。比方说Select * from sys.dm_os_wait_stats 的输出里面就有Latch的有关信息:那么什么是PAGELATCH和PAGEIOLATCH呢?先说什么Latch。 Latch是SQL server内部用来同步资源访问的一个数据结构,和操作系统的critical section 或 ReaderWriterLock类似。Latch保护了那些想保护的资源,使得访问同步有序。比方说,当某个线程获得某个资源的latch的独占使用权的时候,别的线程如果也需要访问这个latch则它必 阅读全文
posted @ 2011-12-28 17:48 xiaohuime 阅读(347) 评论(0) 推荐(0) 编辑
摘要: http://msdn.microsoft.com/zh-cn/library/ms144259.aspx正确使用安装参数mark 阅读全文
posted @ 2011-12-28 17:40 xiaohuime 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 导言曾经做了大约9年的DBA,期间有一些开发人员不断的问我:“我厌倦了编码,现在我想转为DBA,我应该从什么地方开始呢?”我答应基于我的经验写一篇文章去回答这些问题,所以这篇文章主要基于我做SQLServer和DB2的DBA的经验,并且欢迎其他DBA在此问题上共享他们的经验。初级DBA的战略着眼于基本的DBA任务:事有先后成为初级DBA最快的方式是了解DBA每天的任务范围并掌握完成这些任务需要的技术。我认为初级DBA的工作至少是每天DBA任务的40%。下面是每个DBA基本的任务列表。安装SQLServer。需要的知识:SQLServer组件(企业管理器、事件探查器、查询分析器和其他工具,等等) 阅读全文
posted @ 2011-12-28 11:34 xiaohuime 阅读(294) 评论(1) 推荐(1) 编辑
摘要: 很通常的一种方法是:在新文件组中创建一个表结构相同的新表,将原表的数据导入新表,删除原表,重命名新表。这样做很麻烦,而且还要重新设置权限等。其实如果了解了聚集索引的结构,就很简单了。 聚集索引里存放的数据和表的数据必须在同一个文件组中,而且它们的顺序也是一致的,因为聚集索引的叶子节点实际上就是存放的表的数据,不象非聚集索引,叶子节点只是存放了一个指向表数据或者聚集索引的指针而已,真正的数据还是存放在表或聚集索引中。这样我们只要把聚集索引创建在新的文件组上,那么表的数据也就跟着转移到这个新的文件组上了。这里要注意的一点就是聚集索引和主键是不是建在相同的字段上的,如果相同,处理主键就行了,如果不同 阅读全文
posted @ 2011-12-28 11:12 xiaohuime 阅读(443) 评论(0) 推荐(0) 编辑
摘要: 在临时表create table #T (…)和表变量declare @T table (…)之间主要有3个理论上的不同。第一个不同是:事务日志不会记录表变量。因此,它们脱离了事务机制的范围,从下面的例子可显而易见:create table #T (s varchar(128)) declare @T table (s varchar(128)) insert into #T select 'old value #' insert into @T select 'old value @' begin transaction update #T set s= 阅读全文
posted @ 2011-12-28 10:57 xiaohuime 阅读(260) 评论(0) 推荐(0) 编辑
摘要: http://www.microsoft.com/download/en/details.aspx?id=722The Microsoft SQL Server 2008 R2 System Views Map shows the key system views included in SQL Server 2008 and 2008 R2, and the relationships between them.DMV和DMF不是基于真实存在于数据库文件中的表,而是基于sql server的一些内部结构。DMV和DMF对象可以被分为几类,它们都存在于系统架构中(sys schema),其名字 阅读全文
posted @ 2011-12-28 10:30 xiaohuime 阅读(215) 评论(0) 推荐(0) 编辑