预配置数据库优化
由于SQL Server在任何BizTalk Server环境中都发挥着关键作用,因此配置/优化SQL Server以获得最佳性能至关重要。 如果SQL Server性能不佳,则BizTalk Server使用的数据库将成为瓶颈,BizTalk Server环境的整体性能将受到影响。 本主题介绍在安装BizTalk Server和配置BizTalk Server数据库之前应遵循的几个SQL Server性能优化。
设置 NTFS 文件分配单元
SQL Server将其数据存储在盘区中,盘区是 8 个物理连续 8K 页面(64 KB)的集合。 因此,若要优化磁盘性能,请将 NTFS 分配单元大小设置为 64KB,如 预部署 I/O 最佳做法中的“磁盘配置最佳做法”中所述。
SQL Server的版本和版本的注意事项
SQL Server的各种版本提供了可能影响BizTalk Server环境性能的不同功能。 例如,在高负载条件下,32 位版本SQL Server可用的数据库锁数可能会超过,这对 BizTalk 解决方案的性能不利。 如果在测试环境中遇到“锁定”错误,请考虑将 MessageBox 数据库放在 64 位版本的 SQL Server 上。 在 64 位版本的 SQL Server 上,可用锁定的数目将大大增加。
在决定 BizTalk 环境所需的数据库引擎功能时,请考虑下表。 对于需要聚类分析支持、BizTalk Server日志传送支持或 Analysis Services 支持的大规模企业级解决方案,则需要SQL Server Enterprise版本来托管SQL Server数据库。
有关SQL Server版本支持的功能的完整列表,请参阅SQL Server版本和支持的功能。
数据库规划注意事项
建议将SQL Server数据库托管在快速存储 (例如快速 SAN 磁盘或快速 SCSI 磁盘) 。 建议使用 RAID 10 (1+0) 而不是 RAID 5,因为 raid 5 在写入时速度较慢。 较新的 SAN 磁盘具有非常大的内存缓存,因此在这些情况下,raid 选择并不那么重要。 为了提高性能,数据库及其日志文件可以驻留在不同的物理磁盘上。
如果使用的是存储区域网络 (SAN) ,请考虑 (HBA) 队列深度优化主机总线适配器。 这可能会显著影响 I/O 吞吐量,开箱即用值可能不足以SQL Server。 需要测试才能确定最佳值,尽管队列深度为 64 通常被接受为没有任何特定供应商建议的良好起点
为 SQL Server 安装最新的 Service Pack 和累积更新
为SQL Server以及最新的.NET Framework Service Pack 安装最新的 Service Pack 和最新累积更新。
在 BizTalk Server 和 SQL Server 上安装 SQL Service Pack 和累积更新
为SQL Server安装 Service Pack 或累积更新时,请在BizTalk Server计算机上安装 Service Pack 或累积更新。 BizTalk Server使用由SQL Server Service Pack 和累积更新更新的 SQL 客户端组件。
考虑使用快速固态硬盘 (SSD) 来容纳SQL Server tembdb
请考虑使用一个或多个固态硬盘 (SSD) 驱动器来容纳 TempDB。 与传统硬盘驱动器不同,SSD 驱动器具有显著的性能优势,在进入主流市场时价格迅速下降。 由于 TempDB 性能通常是整体SQL Server性能的一个关键因素,因此驱动器增加的初始成本通常会因整体SQL Server性能的提高而迅速收回,尤其是在运行SQL Server性能至关重要的企业应用程序时。
考虑实现 SQL Server 2008 R2 数据收集器和管理Data Warehouse
SQL Server 2008 R2 支持使用新的数据收集器和管理Data Warehouse来收集环境/数据库性能相关数据,以便进行测试和趋势分析。 数据收集器将所有收集的数据保存到指定的管理Data Warehouse。 虽然这不是性能优化,但对于分析任何性能问题非常有用。
授予用于SQL Server Windows 锁页内存权限的帐户
向 SQL Server 服务帐户授予“内存中 Windows 锁定页”权限。 这样做是为了防止 Windows 操作系统通过锁定物理内存中为缓冲池分配的内存来分页SQL Server进程的缓冲池内存。
在我们的实验室环境中,默认情况下已启用 Windows 策略 “锁定内存中的页面” 选项。 请参阅 启用“锁定内存页”选项。
向SQL Server服务帐户授予SE_MANAGE_VOLUME_NAME权限
确保运行SQL Server服务的帐户具有“执行卷维护任务”Windows 权限,或确保它属于具有权限的组。 这将允许即时文件初始化,确保在数据库必须自动增长时获得最佳性能。
设置最小和最大服务器内存
运行托管BizTalk Server数据库的SQL Server的计算机应专用于运行SQL Server。 当运行SQL Server托管BizTalk Server数据库的计算机专用于运行SQL Server时,我们建议将每个SQL Server实例上的“最小服务器内存”和“最大服务器内存”选项设置为指定要分配给SQL Server的固定内存量。 在这种情况下,应将“最小服务器内存”和“最大服务器内存”设置为相同的值, (等于SQL Server将使用) 的最大物理内存量。 这将减少SQL Server动态管理这些值的开销。 在运行 SQL Server 的每台计算机上运行以下 T-SQL 命令,指定要分配给SQL Server的固定内存量:
sp_configure ‘Max Server memory (MB)’,(max size in MB)
sp_configure ‘Min Server memory (MB)’,(min size in MB)
在设置SQL Server的内存量之前,请通过从总物理内存中减去 Windows Server 所需的内存来确定适当的内存设置。 这是可以分配给SQL Server的最大内存量。
注意
如果运行SQL Server托管BizTalk Server数据库的计算机也托管企业单 Sign-On 主机密服务器,则可能需要调整此值,以确保有足够的内存可用于运行企业单一 Sign-On 服务。 在SQL Server群集上运行企业单一 Sign-On 服务的群集实例,为主机密服务器提供高可用性并非罕见。 请参阅 群集主密钥服务器
在BizTalk Server使用的每个SQL Server实例上,将 tempdb 数据库拆分为多个大小相等的数据文件
确保用于 tempdb 的数据文件大小相等至关重要,因为 SQL Server 使用的比例填充算法基于数据文件的大小。 如果创建大小不相等的数据文件,则比例填充算法将使用最大的文件进行 GAM 分配,而不是在所有文件之间分散分配,从而破坏创建多个数据文件的目的。 tempdb 数据文件的最佳数量取决于 tempdb 中显示的闩锁争用程度。 作为一般经验法则,数据文件的数量应等于 CPU 数为 8 或更少的处理器核心数/CPU 数。 对于 CPU 数超过 8 的服务器,请再次创建 CPU 数 (一半的数据文件,只有闩锁争用) 。
在实验室环境中,我们使用以下脚本创建了 8 个 TempDB 数据文件,其中每个数据文件的文件大小为 1024 MB,增长 100 MB,日志文件为 512 MB,增长 100 MB。 数据文件将移动到驱动器 H: ,日志文件将移动到驱动器 I:。
重要
此脚本“按原样”提供,仅用于演示或教育目的,使用风险自担。 Microsoft 不支持使用此脚本,并且 Microsoft 不保证此脚本的适用性。
--<<<<<<<<<<----------------------------------------------------------------->>>>>>>>>>--
-- Use of included script samples are subject to the terms specified at
-- http://www.microsoft.com/info/cpyright.htm
--<<<<<<<<<<----------------------------------------------------------------->>>>>>>>>>--
--***Instructions***
-- 1. If running the script from a remote server, change the context in SSMS to target instance
-- 2. Enable SQLCMD mode (add & click toolbar button or toggle by clicking Query > SQLCMD Mode)
-- 3. Commence execution of scripts (recommend running statements discretely to more easily remedy potential problems)
-- 4. Examine servername & temp configuration
-- 5. If necessary, 1) Replace instance name in path to reflect target instance *all throughout script*
-- 2) Modify root drives to reflect drives designated for data & log (folder creation *and* ALTER DB statements)
-- 6. Resume script execution
-- 7. If necessary, create new folders
-- 8. Modify/Add data & log files
-- 9. Recycle SQL service using sqlservermanager10.msc
--10. Examine results & if appropriate, delete original tempdb data log files
--(if they were "moved", the original files aren't automatically deleted)
--<<<<<<<<<<----------------------------------------------------------------->>>>>>>>>>--
--1. If running the script from a remote server, change the context in SSMS to target instance
--2. Enable SQLCMD mode (add & click toolbar button or toggle by clicking Query > SQLCMD Mode)
--3. Commence execution of scripts (recommend running statements discretely to more easily remedy potential problems)
--4. Examine servername & temp configuration
SELECT @@SERVERNAME
EXEC dbo.sp_helpdb tempdb
--tempdev 1 C:\tempdb.mdf PRIMARY 8192 KB Unlimited 10% data only
--templog 2 C:\templog.ldf NULL 512 KB Unlimited 10% log only
GO
--5. If necessary, 1) Replace instance name in path to reflect target instance *all throughout script*
-- 2) Modify root drives to reflect drives designated for data & log (folder creation *and* ALTER DB statements)
--6. Resume script execution
--7. If necessary, create new folders
--!!md H:\MSSQL10.<instance>
--!!md H:\MSSQL10.<instance>\MSSQL
--!!md H:\MSSQL10.<instance>\MSSQL\DATA
GO
-- 8. Modify/Add data & log files
--note: even if the out-of-box mdf is already where it needs to be,
--the first command is necessary to modify size & filegrowth
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev , FILENAME = 'H:\tempdb.mdf' , SIZE = 1024MB , FILEGROWTH = 100MB)
ALTER DATABASE tempdb ADD FILE (NAME = tempdat2 , FILENAME = 'H:\tempdat2.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)
ALTER DATABASE tempdb ADD FILE (NAME = tempdat3 , FILENAME = 'H:\tempdat3.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)
ALTER DATABASE tempdb ADD FILE (NAME = tempdat4 , FILENAME = 'H:\tempdat4.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)
ALTER DATABASE tempdb ADD FILE (NAME = tempdat5 , FILENAME = 'H:\tempdat5.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)
ALTER DATABASE tempdb ADD FILE (NAME = tempdat6 , FILENAME = 'H:\tempdat6.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)
ALTER DATABASE tempdb ADD FILE (NAME = tempdat7 , FILENAME = 'H:\tempdat7.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)
ALTER DATABASE tempdb ADD FILE (NAME = tempdat8 , FILENAME = 'H:\tempdat8.ndf' , SIZE = 1024MB , FILEGROWTH = 100MB)
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = templog , FILENAME = 'I:\templog.ldf', SIZE = 512MB , FILEGROWTH = 100MB)
GO
--8b. Modify log file: modify drive & instance name to reflect designated destination for tempdb log
--!!md I:\MSSQL10.<instance>
--!!md I:\MSSQL10.<instance>\MSSQL
--!!md I:\MSSQL10.<instance>\MSSQL\DATA
GO
-- 9. Recycle SQL service in SQL Server Services node of sqlservermanager10.msc
--note, if running script from a UNC share, SSMS will report an error,
--but SQL Server Configuration Manager will open if its location is in %path%
!!sqlservermanager10.msc
--10. Examine results & if appropriate, delete original tempdb data log files
--(if they were "moved", the original files aren't automatically deleted)
EXEC dbo.sp_helpdb tempdb
--!!del C:\tempdb.mdf
--!!del C:\templog.ldf
GO
使用监视SQL Server性能中所述的 SQL Server 2008 活动监视器或 SQL Server 2005 性能仪表板报告来识别闩锁争用问题。
手动设置SQL Server进程相关性
进程相关性选项可以在具有 16 个或更多 CPU 的非 NUMA 计算机上运行的高端企业级SQL Server环境中提供性能增强。 在对 MessageBox 数据库中的共享表发生争用的高吞吐量 BizTalk 环境中尤其如此。 由于实验室环境中使用的SQL Server计算机未启用 NUMA,并且有 16 个核心,因此为了优化性能,我们使用了以下命令来设置进程相关性:
手动将SQL Server进程相关性从 0 设置为 15
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 to 15
有关详细信息,请参阅 ALTER SERVER CONFIGURATION (Transact-SQL) 。
配置 MSDTC
若要促进SQL Server与BizTalk Server之间的事务,必须启用 Microsoft 分布式事务处理协调器 (MS DTC) 。 若要在 SQL Server 上配置 MSDTC,请参阅主题提高操作系统性能的一般准则。
为所有SQL Server实例启用跟踪标志 T1118 作为启动参数
实现跟踪标志 –T1118 通过删除几乎所有单页分配来帮助减少跨SQL Server实例的争用。 有关详细信息,请参阅 KB 328551:PRB:tempdb 数据库的并发增强。
请勿更改最大并行度的默认SQL Server设置、SQL Server统计信息或数据库索引重新生成和碎片整理
如果SQL Server实例将容纳BizTalk Server数据库,则某些SQL Server设置不应更改。 具体而言,不应修改SQL Server最大并行度、MessageBox 数据库上的SQL Server统计信息以及数据库索引重新生成和碎片整理的设置。 请参阅SQL Server不应更改的设置。