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 组件。临时表必须是全局的(对多个连接可见)或常规用户表。