如何改进 RAMDisk 上的 TempDb 显示与物理硬盘驱动器相当的性能

cro*_*sek -4 sql-server optimization tempdb

给定 2 个 SQL Server 实例,其中第二个实例配置有用于 tempdb 的 RAMDisk 和以下测试用例。

-- Create source data
select top(1000000) * /* ~10 cols */ into #t1 from SomeData;
Run Code Online (Sandbox Code Playgroud)

然后测量这些级联选择的总运行时间;

-- Benchmark  
select * into #t4 from #t1;
select * into #t5 from #t4;
select * into #t6 from #t5;
Run Code Online (Sandbox Code Playgroud)

我的运行时间是一样的~(15s vs ~15s)。一个 CPU 在整个测试期间都达到最大值。

有没有办法加快跨 CPU 的查询(是 tempdb 文件分区)吗?

通过评论请求数据:

The 1 CPU is the SQL Server 2012 process on a 12 CPU server circa 2012.
Machine: 24GMb RAM, HardDrives: 10kRpm x 2 stripe,  
RamDisk; Any popular, they are 100x to 1000x faster.
DataSource: Anything reasonable, increase # rows until stressed.
Run Code Online (Sandbox Code Playgroud)

Pau*_*ite 10

如果你问是否SELECT INTO可以在写作时使用并行性,目前的答案是“否”。

并行SELECT INTO添加到食品中的SQL Server 2014。它在Community Technical Preview 1 中起作用,但不鼓励(或有效)对预发布软件进行性能测试。ParallelSELECT INTO不需要多个文件或文件组。

除非您的十列非常宽(问题中没有定义!)或者您的 CPU 特别慢,或者您的 RAM 磁盘驱动程序特别低效,否则在 RAM 磁盘上写入三个副本 15 秒似乎是相当长的时间tempdb

同样,您没有说明您正在使用哪种 RAM 磁盘产品,或者您是否/如何分析哪个进程正在消耗 CPU。

在 2012 及包括 2012 的 SQL Server 版本中,aSELECT INTO的性能仅限于单核的性能。添加文件tempdb将不允许工作分布在多个逻辑处理器上。

在 2012 年实现对临时表的多线程写入涉及使用 SSIS 或使用不安全权限集和 SqlBulkCopy 接口的自定义 CLR 组件。临时表必须是全局的(对多个连接可见)或常规用户表。