SQL Server 2005中处理表分区问题
数据库性能调优是每一个优秀SQL Server管理员最终的责任。虽然保证数据的安全和可用性是我们的最高的目标,但是假如数据库应用程序无法满足用户的要求,那么DBA们会因为性能低下的设计和实现而受到指责。SQL Server 2005在数据库性能方面得到了很多提高,尤其是表分区的技术。如果你还没不了解表分区的特征,那么请你花点时间读这篇文章。
表分区的概念不是一个新的概念;只要你当过一段时间的SQL Server DBA,那么你可能已经对一些频繁访问的表进行过归档,当这个表中的历史数据变的不再经常被访问的时候。比如,假设你有一个打印时间报表的应用,你的报告很少会查询1995年的数据,因为绝大部分的预算规划会基于最近几年的数据。
在SQL Server的早期版本中,你可以创建多个表。每一个表都具有相同的列结构,用来保存不同年份的数据。这样,当存在着对历史数据访问的必要的时候,你可以创建一个视图来对这些表进行查询处理。将数据保存在多个表中是很方便的,因为相对于查询时扫描整个大表,扫描小表会更快。但是这种好处只有在你预先知道哪些时间段的数据会被访问。同时,一旦数据过期,你还需要创建新表并且转移新产生的历史数据。
SQL Server 7和SQL Server 2000支持分布式分区视图(distributed partitioned views,又称为物化视图,materialized views)。分布式分区视图由分布于多台服务器上的、具有相同表结构的表构成,而且你还需要为每一个服务器增加链接服务器定义(linked server definitions),最后在其中一台服务器上创建一个视图将每台服务器上返回的数据合并起来。这里的设计思想是数据库引擎可以利用多台服务器的处理能力来满足查询。
但是,分布式分区视图(DPV)受到很多限制,你可以在SQL Server的在线帮助文档中阅读到。虽然DPV在一些情况下能够提供性能上的提高,但是这种技术不能被广泛的应用。已经被证明它们不能满足逐步增长的企业级应用的要求。何况,DPV的实现是一个费力的过程,需要DBA进行很多工作。
SQL Server 2005开始支持表分区,这种技术允许所有的表分区都保存在同一台服务器上。每一个表分区都和在某个文件组(filegroup)中的单个文件关联。同样的一个文件/文件组可以容纳多个分区表。
在这种设计架构下,数据库引擎能够判定查询过程中应该访问
相关文档:
1、常用日期方法(下面的GetDate() = '2006-11-08 13:37:56.233')
(1)DATENAME ( datepart ,date )
返回表示指定日期的指定日期部分的字符串。Datepart详见下面的列表.
SELECT DateName(day,Getdate()) –返回8
(2)DATEPART ( datepart , date )
返回表示指定日期的指 ......
declare @xml xml
set @xml = '<root/>'
select @xml
declare @value varchar(10)
set @value = 'val1'
set @xml.modify('insert <item value="{sql:variable("@value")}" /> into (/root)[1]')
select @xml
set @value = 'val2'
set @xml.modify('replace value of (/root/item/@value)[1] with "val2 ......
快照隔离 Snapshot Isolation
1、写入程序不会阻碍读取程序
2、新的隔离级别提供了以下优点:
1) 提高了只读应用程序的数据可用性
2) 允许在OLTP环境中执行非阻止读取操作
3) 可对写入事务进行自动的强制冲突检测
3、演示代码
CREATE DATABASE demo2
GO
USE demo2
ALTER DATABASE demo2 SET allow_snapsho ......