![使用外部 USB 硬盘运行 SQL Server Analysis Services](https://linux22.com/image/495785/%E4%BD%BF%E7%94%A8%E5%A4%96%E9%83%A8%20USB%20%E7%A1%AC%E7%9B%98%E8%BF%90%E8%A1%8C%20SQL%20Server%20Analysis%20Services.png)
我正在 SQL Server Analysis Services 中构建一个多维数据集,它使用本地 SQL Server 实例作为其数据源。数据源中的大部分数据是一个大型事实表(~200GB),对于本地硬盘来说太大了,所以我将该数据库的 .mdf 和 .ldf 文件移动到了外部 USB 硬盘上。我想将这些文件保留在外部硬盘上,但将处理后的多维数据集存储在本地硬盘上。我希望虽然它会使多维数据集处理变慢,但当客户端连接时,多维数据集查询仍然会很快
当我可以处理多维数据集时,这有效:多维数据集查询仍然很快,因为多维数据集查询不会影响慢速外部 USB 硬盘。我遇到的问题是,当我去处理多维数据集时,经常会收到如下错误:
“OLE DB 错误:OLE DB 或 ODBC 错误:等待页面 (1:1785)、数据库 ID 5 的缓冲区闩锁类型 2 时发生超时。;42000
转到事件日志,我看到如下错误:
SQL Server 已遇到 29351 次 I/O 请求,这些请求在数据库 [X] (5) 中的文件 [U:\sqldata\X.mdf] 上花费超过 15 秒的时间才能完成。操作系统文件句柄为 0x0000000000000164。最新长 I/O 的偏移量为:0x00002f4b664000
发生这种情况的原因似乎是 USB 硬盘速度较慢。我不介意处理查询所需的时间太长,但 SQL Server 似乎对 I/O 请求有硬性限制。有办法解决这个问题吗?
答案1
您可以使用跟踪标志 830 关闭此行为,了解更多信息查看 msdn 上的这篇文章
dbcc traceon(830, -1)
或者作为启动参数(如果您希望永久打开它):添加 /T830 作为服务启动参数。
鉴于您拥有如此便宜的磁盘并且正在运行 SQL Server 2008,请看一下为整个数据库打开页面压缩,您将会有少量的 CPU 开销,但我想说在您的情况下,优点大于缺点。
答案2
您还可以检查磁盘碎片吗?这可能会加快一点速度。
(显然,实际上对磁盘进行碎片整理,而不是仅仅检查它,会加快速度......)
答案3
由于您正在运行 SQL Server 2008,我建议您考虑在数据仓库表上使用数据压缩(如果您确实在使用 DW,我从您的措辞中推断出这一点)。使用此技术可能可以将事实表放在速度更高的驱动器上。
答案4
确保您已将数据库文件排除在任何防病毒检查之外,这可能会影响大文件的性能。