随笔分类 - SQL Server 性能优化
摘要:锁的概述一. 为什么要引入锁多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统脏读A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致不可重复读A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些操作以避免产生数据不一致二 锁的分类锁的类别有两种分法:1. 从数据库系统的角度来看:分为独占锁(即排它锁)
阅读全文
摘要:最近客户的数据库暴涨,一开始找不到原因,用sql查询表的空间大小,结果之前用的sql语句只能查询除了text,image外的字段大小.搞得一时间混乱不堪.后来咨询了大师们,找到用sp_spaceused这个系统函数可以查询表的真实大小,包含text等字段.sql如下:declare @id NVARCHAR(100)create table #spt_space( [name] NVARCHAR(50) null, [rows] int null, [reserved] NVARCHAR(50) null, [data] NVARCHAR(50) null, [index_size] NVA.
阅读全文
摘要:三大范式:第1规范:没有重复的组或多值的列,这是数据库设计的最低要求。 第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组成部分。消除部分依赖,大部分情况下,数据库设计都应该达到第二范式。第3规范: 一个非关键字段不能依赖于另一个非关键字段。消除传递依赖,达到第三范式应该是系统中大部分表的要求,除非一些特殊作用的表。更高的范式要求这里就不再作介绍了,个人认为,如果全部达到第二范式,大部分达到第三范式,系统会产生较少的列和较多的表,因而减少了数据冗余,也利于性能的提高。完全按照三大范式规范化设计的系统几乎是不可能的,除非系统特别的小,在规范化设计后,有计划地加入冗
阅读全文
摘要:本帖提供两种做法,可避免在 SQL Server 事务锁定时产生的不正常或长时间阻塞,让用户和程序也无限期等待,甚至引起 connection pooling 连接数超过容量。 所谓的「阻塞」,是指当一个数据库会话中的事务,正在锁定其他会话事务想要读取或修改的资源,造成这些会话发出的请求进入等待的状态。SQL Server 默认会让被阻塞的请求无限期地一直等待,直到原来的事务释放相关的锁,或直到它超时 (根据 SET LOCK_TIMEOUT,本文后续会提到)、服务器关闭、进程被杀死。一般的系统中,偶尔有短时间的阻塞是正常且合理的;但若设计不良的程序,就可能导致长时间的阻塞,这样就不必要地锁定
阅读全文
摘要:今天在博客园看到一篇文章说这个,试了一下,效果不错,记录一下Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->DBCCUPDATEUSAGE(0,sys_UserInfo)withCOUNT_ROWSSELECTrowsFROMsysindexesWHEREid=OBJECT_ID('sys_UserInfo')ANDindid<2使用DBCC UPDATEUSAGE报告sysindexes中的页数和行数错误并进行更正 0
阅读全文
摘要:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->--删除存储过程DECLARE@STRINGVARCHAR(8000)WHILEEXISTS(SELECTNAMEFROMSYSOBJECTSWHERETYPE='P'ANDSTATUS>=0)BEGINSELECT@STRING='DROPPROCEDURE'+NAMEFROMSYSOBJECTSWHERETYPE='P'AND
阅读全文
摘要:1. 死锁原理 根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。 死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。对应到SQL Server中,当在两个或多个任务
阅读全文
摘要:呵呵,最近俺也经常用这玩意才优化数据,懒得写,copy了这位仁兄的文章.原文地址:http://www.cnblogs.com/hsj2010/archive/2010/07/15/1777823.html最近数据库服务器有点慢,去看看哪方面的压力比较大!其实并不是这个Lucky28 数据库影响整个服务器。但多少会有点影响,每个小影响积累起来就影响比较大!这里简单的讲一下:如何使用数据库引擎优化顾...
阅读全文
摘要:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--USEmasterDECLARE@SQLVARCHAR(1000)DECLARE@DBsysnameDECLAREcurDBCURSORFORWARD_ONLYSTATICFORSELECT[name...
阅读全文
摘要:工作中数据库经常出现内存,找了篇文章参照CSDN,中国风(Roy)一篇死锁文章 阻塞:其中一个事务阻塞,其它事务等待对方释放它们的锁,同时会导致死锁问题。 整理人:中国风(Roy) 参照Roy_88的博客 http://blog.csdn.net/roy_88/archive/2008/07/21/2682044.aspx 日期:2008.07.20 ***********************...
阅读全文
摘要:大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server 要全表进行扫描读取表中的每一个记录才能找到所要的数据。索引可以分为簇索引和非簇索引:簇索引通过重排表中的数据来提高数据的访问速度;而非簇索引则通过维护表中的数据指针来提高数据的访问速度。1. 索引的体系结构 SQL Server 2005在硬盘中用8KB页面在数据库文件内存放数据。缺省情况下这些页面及其包...
阅读全文
摘要:近期因工作需要,希望比较全面的总结下SQL SERVER数据库性能优化相关的注意事项,在网上搜索了一下,发现很多文章,有的都列出了上百条,但是仔细看发现,有很多似是而非或者过时(可能对SQL SERVER6.5以前的版本或者ORACLE是适用的)的信息,只好自己根据以前的经验和测试结果进行总结了。 我始终认为,一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段...
阅读全文
摘要:一、引言对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮助。有不少存疑的地方,诚心希望各位不吝赐教指正,共同进步。[最近首页之争沸沸扬扬,也不知道这个放在这合适么,苦劳?功劳?……] 二、B-Tree我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MsSql使用的...
阅读全文
摘要:在以下的文章中,我将以“办公自动化”系统为例,探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页。以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构:CREATETABLE[dbo].[TGongwen](--TGongwen是红头文件表名[Gid][int]IDENTITY(1,1)NOTNU...
阅读全文
摘要:1. SQL优化的原则是: 将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。 调整不良SQL通常可以从以下几点切入: 检查不良的SQL,考虑其写法是否还有可优化内容 检查子查询 考虑SQL子查询是否可以用简单连接的方式进行重新书写 检查优化索引的使用 考虑数据库的优化器 2. 避免出现SELECT * FROM table 语句,要明确查出的字段。 3....
阅读全文