SQLServer2005对海量数据处理
超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算。而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长。这不但影响着数据库的运行效率,也增大数据库的维护难度。除了表的数据量外,对表不同的访问模式也可能会影响性能和可用性。这些问题都可以通过对大表进行合理分区得到很大的改善。当表和索引变得非常大时,分区可以将数据分为更小、更容易管理的部分来提高系统的运行效率。如果系统有多个CPU或是多个磁盘子系统,可以通过并行操作获得更好的性能。所以对大表进行分区是处理海量数据的一种十分高效的方法。本文通过一个具体实例,介绍如何创建和修改分区表,以及如何查看分区表。
1??? SQL Server 2005 SQL Server 2005是微软在推出SQL Server 2000后时隔五年推出的一个数据库平台,它的数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。此外SQL Server 2005结合了分析、报表、集成和通知功能。这使企业可以构建和部署经济有效的BI解决方案,帮助团队通过记分卡、Dashboard、Web Services和移动设备将数据应用推向业务的各个领域。无论是开发人员、数据库管理员、信息工作者还是决策者,SQL Server 2005都可以提供出创新的解决方案,并可从数据中获得更多的益处。 它所带来的新特性,如T-SQL的增强、数据分区、服务代理和与.Net Framework的集成等,在易管理性、可用性、可伸缩性和安全性等方面都有很大的增强。 2??? 表分区的具体实现方法 水平分区常用的方法是根据时期和使用对数据进行水平分区。例如本文例子,一个短信发送记录表包含最近一年的数据,但是只定期访问本季度的数据。在这种情况下,可考虑将数据分成四个区,每个区只包含一个季度的数据。 2.1???? 创建文件组 Alter DATABASE [DeanDB] ADD FILEGROUP [FG1] DeanDB为数据库名称,FG1文件组名。创建文件组后,再使用 Alter DATABASE 将文件添加到该文件组中: Alter DATABASE [DeanDB] ADD FILE ( NAME = N'FG1',FILENAME = N'C:DeanDataFG1.ndf',SIZE = 3072KB,FILEGROWTH = 1024KB ) TO FILEGROUP [FG1] 类似的建立四个文件和文件组,并把每一个存储数据的文件放在不同的磁盘驱动器里。 2.2???? 创建分区函数 Create PARTITION FUNCTION [SendSMSPF](datetime) AS RANGE RIGHT FOR VALUES ('20070401','20070701','20071001') 2.3???? 创建分区方案 Create PARTITION SCHEME [SendSMSPS] AS PARTITION [SendSMSPF] TO ([FG1],[FG2],[FG3],[FG4]) 2.4???? 创建分区表 Create TABLE SendSMSLog ([ID] [int] IDENTITY(1,1) NOT NULL, [IDNum] [nvarchar](50) NULL, [SendContent] [text] NULL [SendDate] [datetime] NOT NULL, ) ON SendSMSPS(SendDate) 2.5???? 查看分区表信息 Select $partition.SendSMSPF(o.SendDate) ???????????????????? AS [Partition Number] ??????,min(o.SendDate) AS [Min SendDate] ??????,max(o.SendDate) AS [Max SendDate] ??????,count(*) AS [Rows In Partition] FROM dbo.SendSMSLog AS o GROUP BY $partition.SendSMSPF(o.SendDate) ORDER BY [Partition Number] 在查询分析器里执行以上脚本 2.6???? 维护分区 3??? 性能对比 表1:分区和未分区性能对比表(单位:毫秒) 测试项目?????? 分区??????????? 未分区 说明: ?1:根据时间检索某一天记录所耗时间 2:单条记录插入所耗时间 3:根据时间删除某一天记录所耗时间 4:统计每月的记录数所需时间 从表1可以看出,对分区表进行操作比未分区的表要快,这是因为对分区表的操作采用了CPU和I/O的并行操作,检索数据的数据量也变小了,定位数据所耗时间变短。 4??? 结束语 对海量数据的处理一直是一个令人头痛的问题。分离的技术是所有设计者们首先考虑的问题,不管是分离应用程序功能还是分离数据访问,如果加以了合理规划,都能十分有效的解决大数据表的运行效率低和维护成本高等问题。SQL Server 2005新增的表分区功能,可以对数据进行合理分区,当用户在访问部分数据时,SQL Server最佳化引擎可以根据数据的实体存放,找出最佳的执行方案,而不至于大海捞针。 ?(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 如何获取所有实例数据库的用户列表
- sql-server-2008-r2 – 使用sp_启动用户存储过程的名称仍然
- MySQL慢查询优化之慢查询日志分析的实例教程
- 从access到sqlserver(写给初学者)
- sqlserver 分支语句及索引
- sql-server – 如何在最小停机时间的情况下将rowversion列添
- 一段脚本实现自动备份并保存最近几天的SQL数据库
- Transactional replication(事务复制)详解之如何跳过一个
- sql-server – 我应该避免使用sp_getAppLock吗?
- SQLServer的分页优化使用Row_Number()分页存在的问题