370 likes | 481 Views
DAT240 升级 SQL2005 的直接益处. 肖维 Technical Lead SQL Server Engine Access Method 微软有限公司. 自我介绍. Access Method 负责的技术范围 数据的访问 (B TREE) 数据的检查 (DBCC CHECK) 数据的修理 (DBCC REPAIR) 图像和文件的存储 (TEXT/IMAGE/VARCHAR) 数据的可靠性:事务管理 数据文件空间管理 (FILE SPACE) 临时数据库 (TEMPDB) 索引管理 (INDEX)
E N D
DAT240升级SQL2005的直接益处 肖维 Technical Lead SQL Server Engine Access Method 微软有限公司
自我介绍 • Access Method负责的技术范围 • 数据的访问 (B TREE) • 数据的检查 (DBCC CHECK) • 数据的修理 (DBCC REPAIR) • 图像和文件的存储 (TEXT/IMAGE/VARCHAR) • 数据的可靠性:事务管理 • 数据文件空间管理 (FILE SPACE) • 临时数据库 (TEMPDB) • 索引管理 (INDEX) • 数据导入 (BULK INSERT)
序言 • 我们已经知道SQL Server™ 2005增加了很多的新特性,可以提高性能,如 • 数据库镜像,分区表,CLR,Service Broker,VARCHAR(MAX),XML 数据类型等 • 但是,你必须修改或者重新编写你的代码才能够获得这些好处 • 你是否知道SQL Server™ 2005还有很多的改进,你不需要修改你的程序就可以从中受益?
序言(续) • 在下面将会介绍其中一些改进之处,我们可以将其分为两类 • 你不需要做任何修改 • 如 执行DBCC命令 • 需要改变服务器或者数据库的设置 • 如统计因子的自动异步更新,RCSI
背景知识 • 最好有管理关系数据库的基本经验 • 最好有关系数据库的基本知识
改进之处 • 全文检索会更快 • 程序并发性能有很大提高(RCSI) • 异步请求提高了分布式查询的性能 • 改善了以下应用程序的可扩展性 • 有大量的重编译的程序 • 大量使用触发器的程序
改进之处(续) • 数据库的维护操作 • DBCC,备份,索引 • 对问题的诊断和解决 • DAC, DMVs, XML Plans
内容 • 全文检索 • 查询的优化 • 编译 • 统计信息 • 查询的执行 • 数据库可靠性检查 • 存储引擎 • SQL Server的内部操作系统
全文检索 • 全文检索可以具有多个实例 • 更易于管理 • 全文检索同其它实例和产品隔离开来 • 全文目录可以备份/还原 • 分离/附加(attach/detach db) • 填充全文索引:100倍的速度(依赖于数据) • 全文查询:一般情况下快30-50%
查询的优化 • 索引视图查询性能的提高 • 更聪明的连接(join)处理: • R.x = S.x and S.x > 10 暗示了R.x = S.x and S.x > 10 and R.x > 10 • 数学运算查询的化简 • 如:a>3 and a>5 可以化简为a>5
编译 • 语句级别的重编译 • SQL 2000是对整个批处理和存储过程的重编译 • 批处理(存储过程) • 语句1 • 语句2 • 为何要重编译 • 表格里大量的数据更新(insert, update, delete) • 统计信息更新 (update statistics)
统计信息的异步更新 • 在OLTP系统中,统计信息的自动更新会导致一个可察觉的停顿 • 解决方案:异步更新 • ALTER DATABASE dbname SET AUTO_UPDATE_STATISTICS_ASYNC ON • 执行计划使用了过期的统计信息,会导致后台自动更新统计信息 • 执行计划不会停顿,但是会使用旧的统计信息
sp_updatestats • 运行UPDATE STATISTICS会影响当前所有用户表和系统表,SQL2000和SQL2005都是如此 • 在SQL2005里面,会自动忽略自从上次创建或更新统计信息以来没有修改过的表和索引 • 内部客户报告说运行时间从SQL2000 的几小时降低到的几分钟 • 得到的好处要依赖于忽略的表和索引的数目和大小
内容 • 全文检索 • 查询的优化 • 编译 • 统计信息 • 查询的执行 • 数据库可靠性检查 • 存储引擎 • SQL Server的内部操作系统
查询的执行 • 能够缓存动态对象的执行计划 • 在SQL2000里面,如果执行计划关系到动态对象,如表变量、触发器等,计划就不会被缓存 • SQL2005能缓存这些计划,避免了每次的重编译 • 分布式查询能够异步执行 • SQL事件探查器能够展现更多的信息 • 如分布式查询追踪和死锁通知 • 重建索引的操作相比SQL2000提升了性能的伸缩性(offline)
触发器 • 触发器执行的更好 • 优于访问日志记录 • 避免了日志扫描(经常成为瓶颈) • 在多重连接的情况下避免了重复扫描 • 更快,在高端系统上伸缩性更好 • 考虑增加tempdb的size
数据库结构的检查 • DBCC CHECK*使用数据库快照以避免锁定 • 检查更加彻底 • 减少图像和文件占用的存储空间 • DBCC SHRINK*, • DBCC INDEXDEFRAG, • ALTER INDEX REORGANIZE • DBCC CHECK*, DBCC SHRINK* 的进程报告 • 长时间运行的CHECK*, SHRINK* 操作会记录在sys.dm_exec_requests中
内容 • 全文检索 • 查询的优化 • 编译 • 统计信息 • 查询的执行 • 数据库可靠性检查 • 存储引擎 • SQL Server的内部操作系统
tempdb 的性能增强 • tempdb 的可伸缩性得到了增强,支持更大的工作量 • 缓存临时表和表变量(@t, #t) • 改善了分配页(allocation page)的访问协议 • 减少tempdb日志产生的数量 • 对表中最初64KB更有效的分配算法 • 什么是分配页? • 帮助空间管理的磁盘页(disk page)
备份 • 可以同时备份数据和日志 • Log Shipping 的日志备份不会被数据备份所阻塞 • RESTORE Verifyonly • 全面检测备份的可靠性 • 执行时间可能延长
数据库恢复 • Checkpoint • 不断自我调整,快速且不影响前台操作 • 可中断的 • 快速恢复 • 在Undo阶段数据库就可用 • 仅企业版可用
RCSI • 可提交-读-快照隔离 • Read-committed-snapshot-isolation • 大多数应用使用系统缺省:read-committed isolation • 对大多数应用有帮助 • 需要数据库设置 READ_COMMITTED_SNAPSHOT • 提高了并发性和可收缩性,减少了死锁 • 提高程序的可预见性(predictability)
RCSI原理 • 所有的delete,update都会做一个copy • 非常高效 • 类似TPCC的工作都不受显著影响 • 如果数据更新量太大,可能有影响 • copy存在版本库(version store) • 在tempdb里 • Copy也可以读,不会阻塞 • Version store 定期清理 • 考虑增加tempdb的size
聚集索引的重建 • SQL2000重建和删除聚集索引会导致非聚集索引的重建 • 如果聚集索引不是唯一的 • SQL2005不再重建,缩短大量时间 • 我们保留了唯一标志以保证索引的正确 • 唯一标志(uniquifier) :自动添加的隐藏列 • 判断indroot 可以知道非聚集索引是否重建
索引管理 • Defrag提高索引页的顺序性和连续性。 • (a, 1) – (b, 2) – (c, 3) • SQL2005的速度有显著提高。 • Online 建索引 • 建索引的同时允许 INSERT, DELETE, UPDATE, SELECT • 比offline要慢 • 考虑增加tempdb的size
内容 • 全文检索 • 查询的优化 • 编译 • 统计信息 • 查询的执行 • 数据库可靠性检查 • 存储引擎 • SQL Server的内部操作系统
SQL Server 的内部操作系统SQLOS • 动态使用AWE内存 • 缓冲池(buffer pool)替换策略 • 能够更好的缓存正确的页 • 不变页的Sniffer • 随机察看缓冲池中的页以察看checksum的变化 • 察觉可能的硬件问题 • DAC管理员专用连接 • 死锁输出XML • 每个批处理(batch)自动找到最空闲的CPU
锁定机制的性能提高 • 锁的内存更NUMA-aware • 锁的分区 • 把单个的锁资源划分为多个锁资源,每个CPU一个 • NL, Sch-S, IS, IU, IX模式的锁可以被单个CPU获取 • S, U, X, SCH-M模式的锁必须被所有的CPU获取 • 在16个CPU以上的系统,分区会被默认打开
FILE I/O • Page Checksum 在新数据库上默认打开 • 提高可靠性 • 快速数据文件初始化 • 不需要全部用0填充空间 • 需要给服务帐号提供SE_MANAGE_VOLUME_NAME的权限 • 需要Windows XP / 2003 • 对CREATE DATABASE , ALTER DATABASE, RESTORE, 文件增长性能有明显提升
DMV • 帮助性能调优 • sys.dm_exec_query_stats • 找到平均最耗时的query • sys.dm_db_file_space_usage • sys.dm_db_session_space_usage • 分析tempdb空间的使用
总结 • SQL Server 2005 对现有应用的某些性能有所提高,而且更加易于管理 • 全文检索,查询的优化 • 编译,统计信息 • 查询的执行 • 数据库可靠性检查 • 存储引擎 • SQL Server的内部操作系统
升级考虑事项 • 我的应用是否一定可以提高性能? • 取决于具体应用,并非所有功能都有性能提高 • 对于某些设置的调整: • 可能要增大tempdb • 可能要增大内存 • 升级之前最好要测试 • 核心应用一定要测 • 遇到问题怎么办?
我常去的网上社区 • microsoft.public.sqlserver.server • microsoft.public.cn.sqlserver • 欢迎访问我的BLOG • http://blogs.msdn.com/weix/ • 中文 SQL Server 主页: http://www.microsoft.com/china/sql • 其他相关讲座: • DAT239:SQL Server 2005数据仓库新功能
其他的网上资源(English) • SQL Server 2005 Technet http://www.microsoft.com/technet/prodtechnol/sql • SQL Server 2005 网上实验室http://msdn.microsoft.com/vstudio/tryit/hosted/sql • SQL社区 http://www.microsoft.com/technet/prodtechnol/sql/community/default.mspx
问题? • Wei.Xiao@microsoft.com