SQL Server数据库及SSIS优化攻略

SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案(包括数据仓库的提取、转换和加载 (ETL) 包)的平台。用于提取和加载数据的数据源和目标,清理、聚合、合并和复制数据的转换。一般企业信息系统中的SSIS的Job会在运行一段时间之后就会开始变慢。虽然我们可以通过优化SQL查询语句和优化流程的方法来提高执行效率,但是最终它都是有一个极限的。尽管每次运行都会清除上一次运行在数据库留下的临时数据或者使用Merge语句来刷新表中的数据,但是随着数据记录被不断地插入、更新和删除,数据表会占用越来越大的磁盘空间,而且当中会出现很多未使用空间,即没有数据的数据页的叶节点。
当我们清空数据的时候,我们可以使用TRUNCATE TABLE <表名>语句来释放表占用的所有空间。但是在一些表需要保留一些数据,所以对于这些表不能使用TRUNCATE TABLE <表名> 语句,需要用其他方法来移除未使用的表空间。对于没有聚簇索引的表而言,我们可以通过新建和删除聚簇索引或DBCC CLEANTABLE ('<数据库名>','<表名>') 的方法来移除表未使用的数据页节点,来降低搜索全表的时间,从而提高查询效率。而对于已经存在聚簇索引的表来说,只需要重建索引即可移除绝大部分的未使用的表空间。这样以后再将数据库的恢复模式设为简单并收缩一下数据库,就可以彻底的从数据库文件中移除这些未使用的表空间。这样既减小了数据库文件数据文件的大小,又使数据表查询的性能提高了。
当然最后我们还有一件事情需要做。因为SQL Server查询计划是基于代价优化的,而这个需要数据表的统计信息作为依据,所以正确的数据表统计信息就至关重要,因而我们需再使用UPDATE STATISTICS 或EXEC sp_updatestats 来更新一下数据库中所有表的统计信息,这样就完美了。
当然如果你想要在删除大量记录或用MERGE语句合并更新大量记录的同时释放未使用的空间的话,可以使用DELETE FROM <表名> WITH(TABLOCK) WHERE ...语句或MERGE INTO <表名> WITH(TABLOCK) ...语句来完成。
当然还有四个要点可以作为参考。
第一,SQL Server提供了 Database Engine Tuning Adviser, 它是SQL Server自带的数据库性能调优工具之一。我们可以利用这个工具分析你所要对数据库进行的查询,从而决定需要在哪些表上使用哪种索引,以提高数据库的整体负载性能。
第二,可以通过适当地调整SSIS的运行配置参数,来提高其运行效率,使其每一批加载数据和处理数据的时间更为接近,最大限度地减少等待时间,或者使其运行的线程数量尽量接近所在服务器的物理CPU的数量,以提高其并行效率,具体可以参考MSDN上的“集成服务:性能优化技巧”(https://msdn.microsoft.com/en-us/library/cc966529.aspx)这篇文章。
第三,如果条件允许的话,还可以使用比较高大上的数据分区,可以参考博客园里的文章SQLServer表分区(http://kb.cnblogs.com/page/73921/)。 
第四,除了升级CPU、增加CPU和内存的数量以外,如果不差钱的话,还可以在服务器上使用固态硬盘SSD,或者使用RAID 5阵列来提高硬盘的I/O速度。现在似乎已经出现了内置RAID 5阵列的服务器SSD硬盘,价格当然也不菲。

转载于:https://my.oschina.net/sitsit/blog/376237

你可能感兴趣的:(数据库)