随笔分类 -  SQL性能调优

摘要:最近一个朋友公司的OA系统总是出故障,具体表现在某个特定用户在登录后,无法查看自己的任务。等过了一会后,就报503错误。让我帮忙看看。 首先服务器是JBOSS,数据库是SQL Server 2005 64位企业版。 根据以上提供的信息,首先找到JBOSS日志,当某个用户登录后点查看待办任务,JBOSS日志就会显示: ERROR [org.jboss.ejb... 阅读全文
posted @ 2012-10-17 14:36 CareySon 阅读(5627) 评论(7) 推荐(2) 编辑
摘要:本篇文章也可以叫做”建立索引时那一列应该放到最前面”。 通常对于索引列的选择的通常准则都是把最高选择率(译者注:所谓选择率指的是在where子句中作为选择条件使用次数的比例来说的)的列放在最前面,我接下来并不是要说这个准则不对,因为这个准则本身是正确的。但通常在给出这个准则的同时并没有同时给出为什么要把最高选择率的列作为索引列以及索引列的顺序。 综上原因,这很有可能导致对索引列选择的误解。比如,在极端情况下,某个人风闻了上述建议后,把所有非聚集索引的的索引键都设置成聚集索引的键(因为这列有很高的选择率),然后开始纠结为什么数据库的性能开始惨不忍睹。 出现上... 阅读全文
posted @ 2012-08-22 08:30 CareySon 阅读(4147) 评论(3) 推荐(7) 编辑
摘要:简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理。 二级存储(secondary storage) 对于计算机来说,存储体系是分层级的。离CPU越近的地方速度愉快,但容量... 阅读全文
posted @ 2012-08-16 07:38 CareySon 阅读(47029) 评论(50) 推荐(75) 编辑
摘要:简介 当查询优化器(Query Optimizer)将T-SQL语句解析后并从执行计划中选择最低消耗的执行计划后,具体的执行就会交由执行引擎(Execution Engine)来进行执行。本文旨在分类讲述执行计划中每一种操作的相关信息。 数据访问操作 首先最基本的操作就是访问数据。这既可以通过直接访问表,也可以通过访问索引来进行。表内数据的组织方式分为堆(Heap)和B树,其中表中没有建立聚集索引时数据是通过堆进行组织的,这个是无序的,表中建立聚集索引后和非聚集索引的数据都是以B树方式进行组织,这种方式数据是有序存储的。通常来说,非聚集索引仅仅包含整个表的部分列,对... 阅读全文
posted @ 2012-05-23 22:48 CareySon 阅读(12618) 评论(22) 推荐(45) 编辑
摘要:查看连接当前数据库的SPID所加的锁 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT DB_NAME(resource_database_id) AS DatabaseName , request_session_id , resource_type , CASE WHEN resource_type = 'OBJECT' THEN OBJECT_NAME(resource_associated_entity_id) WHEN resource_type IN ('KEY', 'PA... 阅读全文
posted @ 2012-05-17 14:53 CareySon 阅读(2360) 评论(0) 推荐(7) 编辑
摘要:查看被缓存的查询计划 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT TOP 20 st.text AS [SQL] , cp.cacheobjtype , cp.objtype , COALESCE(DB_NAME(st.dbid), DB_NAME(CAST(pa.value AS INT))+'*', 'Resource') AS [DatabaseName] , cp.usecounts AS [P... 阅读全文
posted @ 2012-05-17 13:02 CareySon 阅读(2681) 评论(1) 推荐(7) 编辑
摘要:有关索引的DMV 1.查看那些被大量更新,却很少被使用的索引 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT DB_NAME() AS DatabaseName , SCHEMA_NAME(o.Schema_ID) AS SchemaName , OBJECT_NAME(s.[object_id]) AS TableName , i.name A... 阅读全文
posted @ 2012-05-17 11:57 CareySon 阅读(2161) 评论(8) 推荐(14) 编辑
摘要:简介 SQL Server查询分析器是基于开销的。通常来讲,查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引。而每次查询分析器寻找路径时,并不会每一次都去统计索引中包含的行数,值的范围等,而是根据一定条件创建和更新这些信息后保存到数据库中,这也就是所谓的统计信息。 如何查看统计信息 查看SQL Server的统计信息非常简单,使用如下指令: ... 阅读全文
posted @ 2012-05-14 16:31 CareySon 阅读(15981) 评论(28) 推荐(34) 编辑
摘要:简介 我们都听说过RAID,也经常作为SQL DBA、开发人员或构架师在工作中讨论RAID。但是,其实我们很多人都对RAID的原理,等级,以及RAID是如何影响SQL Server性能并不甚了解。 本篇文章就是为了补上这一课。 磁盘构架 今天的磁盘,和70年代45rpm(转/分钟)的唱片机很像(你还能记得吗?),仅仅是一个有着轴(磁道)旋转的媒体(面)并将数据存入称之为扇区的磁盘段。 就像唱片机那样,磁盘驱动器拥有一个摆臂来控制针(在这里可以称之为”磁头”)来访问数据。但对于磁盘来说,并不像唱片机那样只读,而是既可以读又可以写。 为了从... 阅读全文
posted @ 2012-05-08 16:56 CareySon 阅读(7231) 评论(13) 推荐(14) 编辑
摘要:简介 费了半天劲,今天终于装好SQL Server2012了。按照MSDN中的新特性资料(Columnstore Indexes for Fast DW QP SQL Server 11)。尝试了下ColumnStore Index。ColumnStore Index按照其字面意思所示。是基于列存储的索引。这个概念如图1所示。 图1.ColumnStoreIndex和基于行的Index比较 ColumnStoreIndex是按照列存入页当中,而不是按照传统的以行为单位存入页。因此带来的好处可以归结如下: 以往的数据按照行存储,... 阅读全文
posted @ 2012-03-09 13:32 CareySon 阅读(11827) 评论(15) 推荐(17) 编辑
摘要:简介 在SQL Server中,数据是按页进行存放的。而为表加上聚集索引后,SQL Server对于数据的查找就是按照聚集索引的列作为关键字进行了。因此对于聚集索引的选择对性能的影响就变得十分重要了。本文从旨在从性能的角度来谈聚集索引的选择,但这仅仅是从性能方面考虑。对于有特殊业务要求的表,则需要按实际情况进行选择。 聚集索引所在的列或列的组合最好是唯一的 这个原因需要从数据的存放原理来谈。在SQL Server中,数据的存放方式并不是以行(Row)为单位,而是以页为单位。因此,在查找数据时,SQL Server查找的最小单位实际上是页。也就是说即使你只查找一行很小... 阅读全文
posted @ 2012-03-06 11:30 CareySon 阅读(21814) 评论(56) 推荐(39) 编辑