随笔分类 -  存储

磁盘空间,log,data,tempdb,数据文件转移,压缩。
SQL server 2008里面通过sys.dm_exec_procedure_stats得到存储过程的执行信息
摘要:很多DBA都希望能够得到某个存储过程的执行信息,比如:1) 执行了多少次2) 执行的执行计划如何3) 执行的平均读写如何4) 执行平均需要多少时间等等. 幸运的是SQL server 2008 提供了一个这样的DMV,使得我们比较容易就得到上面的信息。这个DMV是sys.dm_exec_procedure_stats,它输出了下面的信息(部分截图,具体的请参考联机丛书):列名 数据类型 说明 database_idint存储过程所在的数据库 ID。object_idint存储过程的对象标识号。cached_timedatetime存储过程添加到缓存的时间。cached_timedatetime 阅读全文
posted @ 2011-12-29 15:32 xiaohuime 阅读(483) 评论(0) 推荐(0)
谁占用了我的Buffer Pool?
摘要:我在做SQL Server 7.0技术支持的时候有客户问我,“我的SQL Server buffer pool很大,有办法知道是哪些对象吃掉我的buffer Pool内存么?比方说,能否知道是哪个数据库,哪个表,哪个index占用了buffer Pool么?”当时我没有找到这个问题的答案,但是我一直记着这个问题。直到SQL server 2005 版本出现,这个问题迎刃而解。答案就是使用动态视图(DMV) sys.dm_os_buffer_descriptors。这个DMV非常强大。根据SQL Server 联机丛书,这个视图的作用是 “返回有关 SQL Server 缓冲池中当前所有数据页的 阅读全文
posted @ 2011-12-29 15:29 xiaohuime 阅读(171) 评论(0) 推荐(0)
如何监测谁用了SQL Server的Tempdb空间?
摘要: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 阅读(243) 评论(0) 推荐(0)
谁用掉了我的数据库空间?
摘要:随着硬件能力的升级,以及软件应用的扩展,现在的数据库是越来越大了。回想10年前,一个上百GB的数据库就会把支持工程师吓得要命。而现在,上TB的数据库真是比比皆是。DBA遇到的一个常见问题,就是如何监视数据空间的增长情况,或者在数据库用满的时候,能够迅速定位谁是罪魁祸首。了解一个数据库空间使用的最简单方法,就是在Management Studio里,右键点击数据库名字,选择”Reports” – “Standard Reports”,缺省就有4个Disk Usage的报表。它们能很好地统计出了从不同角度分析的数据库空间使用情况。但是在一个非常繁忙的生产环境里,随随便便地跑UI的报表总是有点头皮发 阅读全文
posted @ 2011-12-29 15:05 xiaohuime 阅读(165) 评论(0) 推荐(0)
Tempdb怎么会成为性能瓶颈?
摘要:我曾经遇到过这样一个性能问题。一个客户反映,他的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 阅读(185) 评论(0) 推荐(0)
update操作是先delete后insert的吗?
摘要:最近较忙,很少出炉技术文章了。但最近听得很多的一句话就是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 阅读(1476) 评论(0) 推荐(0)
将一个表从一个文件组移到另一个文件组
摘要:很通常的一种方法是:在新文件组中创建一个表结构相同的新表,将原表的数据导入新表,删除原表,重命名新表。这样做很麻烦,而且还要重新设置权限等。其实如果了解了聚集索引的结构,就很简单了。 聚集索引里存放的数据和表的数据必须在同一个文件组中,而且它们的顺序也是一致的,因为聚集索引的叶子节点实际上就是存放的表的数据,不象非聚集索引,叶子节点只是存放了一个指向表数据或者聚集索引的指针而已,真正的数据还是存放在表或聚集索引中。这样我们只要把聚集索引创建在新的文件组上,那么表的数据也就跟着转移到这个新的文件组上了。这里要注意的一点就是聚集索引和主键是不是建在相同的字段上的,如果相同,处理主键就行了,如果不同 阅读全文
posted @ 2011-12-28 11:12 xiaohuime 阅读(472) 评论(0) 推荐(0)
SQL Server 2008 R2 System Views Map
摘要: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 阅读(230) 评论(0) 推荐(0)