{"id":3725,"date":"2014-05-06T00:34:00","date_gmt":"2014-05-05T22:34:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/"},"modified":"2014-05-06T00:34:00","modified_gmt":"2014-05-05T22:34:00","slug":"sql-server-2014-select-into-operators-can-run-in-parallel","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/","title":{"rendered":"SQL Server 2014: SELECT INTO operators can run in parallel"},"content":{"rendered":"<p><img decoding=\"async\" class=\"blog-image aligncenter\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg\" alt=\"\" \/><\/p>\n<p>A couple of weeks ago, I had to provide some best practices in term of architecture for a &#8220;heavy writes&#8221; environment that consists in importing data from different sources into SQL Server tables. At the customer place, I was asked about interesting new SQL Server features that could be used to increase the performance speed of the data import process. Indeed, SQL Server 2014 provides an interesting enhancement of SELECT INTO statement that is often used in ETL environments. It is now possible to run in parallel insert operations by using the SELECT INTO command.<\/p>\n<p>First, let me say that for versions prior to SQL Server 2014, inserting data in parallel into a single table is possible by using SSIS packages (for instance with several import data tasks in parallel), but the destination must exist. However, it is the creation of the destination table \u201cin-fly\u201d that counts here.<\/p>\n<p>After the release of SQL Server 2014 RTM I decided to test this new enhancement on my lab environment. The laptop I used for my tests is a Lenovo T530 with the following specifications:<\/p>\n<ul>\n<li>A quad core Intel Core I7 3630QM CPU @ 2,40 GHz. Hyper threading is enabled<\/li>\n<li>16 GB RAM (max memory = 12GB for SQL Server)<\/li>\n<li>Windows 8 Pro x64<\/li>\n<\/ul>\n<p>In addition I used two databases to simulate my data import workload process:<\/p>\n<ul>\n<li>An Adventureworks2012 database and a bigTransactionHistory table with a size of approximately 6GB and 156317184 of data rows.<\/li>\n<li>An empty AdventureWorks2012_DW database which we will import data from the bigTransactionHistory table in the AdventureWorks2012 database<\/li>\n<li>A simple recovery model for the both databases will be used during the tests<\/li>\n<li>Each database file is distributed as follows:<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<table style=\"border-collapse: collapse\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr style=\"height: 15pt\">\n<td style=\"width: 134.45pt;border: 1pt solid windowtext;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"179\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\"><strong>database_name<\/strong><\/p>\n<\/td>\n<td style=\"width: 49.6pt;border-width: 1pt 1pt 1pt medium;border-style: solid solid solid none;border-color: windowtext windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"66\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\"><strong>file_id<\/strong><\/p>\n<\/td>\n<td style=\"width: 70.85pt;border-width: 1pt 1pt 1pt medium;border-style: solid solid solid none;border-color: windowtext windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"94\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\"><strong>type_desc<\/strong><\/p>\n<\/td>\n<td style=\"width: 127.6pt;border-width: 1pt 1pt 1pt medium;border-style: solid solid solid none;border-color: windowtext windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"170\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\"><strong>logical_name<\/strong><\/p>\n<\/td>\n<td style=\"width: 35.45pt;border-width: 1pt 1pt 1pt medium;border-style: solid solid solid none;border-color: windowtext windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\"><strong>Drive<\/strong><\/p>\n<\/td>\n<td style=\"width: 35.15pt;border-width: 1pt 1pt 1pt medium;border-style: solid solid solid none;border-color: windowtext windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\"><strong>size_MB<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 15pt\">\n<td style=\"width: 134.45pt;border-right: 1pt solid windowtext;border-width: medium 1pt 1pt;border-style: none solid solid;border-color: -moz-use-text-color windowtext windowtext;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"179\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012_DW<\/p>\n<\/td>\n<td style=\"width: 49.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"66\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">1<\/p>\n<\/td>\n<td style=\"width: 70.85pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"94\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">ROWS<\/p>\n<\/td>\n<td style=\"width: 127.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"170\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012_DW<\/p>\n<\/td>\n<td style=\"width: 35.45pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">C:<\/p>\n<\/td>\n<td style=\"width: 35.15pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">6252<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 15pt\">\n<td style=\"width: 134.45pt;border-right: 1pt solid windowtext;border-width: medium 1pt 1pt;border-style: none solid solid;border-color: -moz-use-text-color windowtext windowtext;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"179\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012_DW<\/p>\n<\/td>\n<td style=\"width: 49.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"66\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">2<\/p>\n<\/td>\n<td style=\"width: 70.85pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"94\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">LOG<\/p>\n<\/td>\n<td style=\"width: 127.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"170\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012_DW_log<\/p>\n<\/td>\n<td style=\"width: 35.45pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">D:<\/p>\n<\/td>\n<td style=\"width: 35.15pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">8000<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 15pt\">\n<td style=\"width: 134.45pt;border-right: 1pt solid windowtext;border-width: medium 1pt 1pt;border-style: none solid solid;border-color: -moz-use-text-color windowtext windowtext;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"179\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012_DW<\/p>\n<\/td>\n<td style=\"width: 49.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"66\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">65537<\/p>\n<\/td>\n<td style=\"width: 70.85pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"94\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">FILESTREAM<\/p>\n<\/td>\n<td style=\"width: 127.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"170\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012_DW_xtp_ckpt<\/p>\n<\/td>\n<td style=\"width: 35.45pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">C:<\/p>\n<\/td>\n<td style=\"width: 35.15pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">0<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 15pt\">\n<td style=\"width: 134.45pt;border-right: 1pt solid windowtext;border-width: medium 1pt 1pt;border-style: none solid solid;border-color: -moz-use-text-color windowtext windowtext;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"179\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012<\/p>\n<\/td>\n<td style=\"width: 49.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"66\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">1<\/p>\n<\/td>\n<td style=\"width: 70.85pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"94\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">ROWS<\/p>\n<\/td>\n<td style=\"width: 127.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"170\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012_Data<\/p>\n<\/td>\n<td style=\"width: 35.45pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">C:<\/p>\n<\/td>\n<td style=\"width: 35.15pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">6413<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 15pt\">\n<td style=\"width: 134.45pt;border-right: 1pt solid windowtext;border-width: medium 1pt 1pt;border-style: none solid solid;border-color: -moz-use-text-color windowtext windowtext;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"179\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012<\/p>\n<\/td>\n<td style=\"width: 49.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"66\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">2<\/p>\n<\/td>\n<td style=\"width: 70.85pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"94\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">LOG<\/p>\n<\/td>\n<td style=\"width: 127.6pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"170\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">AdventureWorks2012_Log<\/p>\n<\/td>\n<td style=\"width: 35.45pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">I:<\/p>\n<\/td>\n<td style=\"width: 35.15pt;border-width: medium 1pt 1pt medium;border-style: none solid solid none;border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color;padding: 0cm 5.4pt;height: 15pt\" valign=\"top\" nowrap=\"nowrap\" width=\"47\">\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\">8000<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>The C: drive is a solid-state Samsung 840 EVO\u00a0drive with SATA 600. I decided to place both database mdf files on this disk because solid-state drives perform well for random IO. Unfortunately, I don\u2019t have a second one to isolate each mdf database file, but in my context, it will be sufficient.<\/p>\n<p>The D: drive is an mechanic disk with 7200 RPM and SATA 600. The AdventureWorks2012_DW transaction log file is placed here.<\/p>\n<p>Finally, the I: drive is a USB drive with 5200 RPM only. It hosts the AdventureWorks2012 source database. In my context, the rotate speed of the I: drive is not important because during the test, we will only read the bigTransactionHistory table.<\/p>\n<p>The hardware description of the environment is important here because the performance gain depends on many factors like the number of available processors, the amount of memory, the performance of the overall storage, the location of the database files, etc. For example, I did not notice a positive performance impact during my first tests because my mdf database files were located on slow disks, which was the main bottleneck regardless of the possibility to use (or not) the select into command in parallel.<\/p>\n<p>So let\u2019s talk about the test: First, I populated the bigTransactionHistory table based on the <a href=\"http:\/\/sqlblog.com\/blogs\/adam_machanic\/archive\/2011\/10\/17\/thinking-big-adventure.aspx\">Adam Machanic\u2019s script<\/a> to have a sufficient size of data for a good comparison.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_7_-_bigTransactionHistoryTable_configuration.jpg\" alt=\"blog_7_-_bigTransactionHistoryTable_configuration\" width=\"581\" height=\"56\" \/><\/p>\n<p>Then I used the following script to bulk insert data into a bigTransactionHistory2 in the AdventureWorks2012_DW database for each test:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_7_-_bigTransactionHistoryTable_to_bigTransactionHistory2.jpg\" alt=\"blog_7_-_bigTransactionHistoryTable_to_bigTransactionHistory2\" width=\"361\" height=\"447\" \/><\/p>\n<p>&nbsp;<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">select<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: gray\">*<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">into<span style=\"font-size: 9.5pt;font-family: Consolas\"> [AdventureWorks2012_DW]<span style=\"color: gray\">.dbo<span style=\"color: gray\">.bigTransactionHistory2<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">from<span style=\"font-size: 9.5pt;font-family: Consolas\"> dbo<span style=\"color: gray\">.bigTransactionHistory<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">option <span style=\"font-size: 9.5pt;font-family: Consolas;color: gray\">(<span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">maxdop<span style=\"font-size: 9.5pt;font-family: Consolas\"> 4<span style=\"color: gray\">)<\/span><\/span><\/span><\/span><\/span><\/div>\n<p>For the first test, I changed the database compatibility of AdventureWorks2012 database to 110 in order to disable SELECT INTO statement in parallel before to lauch the import data script.<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">ALTER<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">DATABASE AdventureWorks2012 <span style=\"color: blue\">SET <span style=\"color: blue\">COMPATIBILITY_LEVEL <span style=\"color: gray\">= 110<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GO<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">select<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: gray\">*<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">into<span style=\"font-size: 9.5pt;font-family: Consolas\"> [AdventureWorks2012_DW]<span style=\"color: gray\">.dbo<span style=\"color: gray\">.bigTransactionHistory2<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">from<span style=\"font-size: 9.5pt;font-family: Consolas\"> dbo<span style=\"color: gray\">.bigTransactionHistory<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">option <span style=\"font-size: 9.5pt;font-family: Consolas;color: gray\">(<span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">maxdop<span style=\"font-size: 9.5pt;font-family: Consolas\"> 4<span style=\"color: gray\">)<\/span><\/span><\/span><\/span><\/span><\/div>\n<p>For the second test, I changed the database compatibility of the same database to 120 (like in the first test) in order to enable the new parallel capability of the SELECT INTO statement. No need to clear the procedure cache here because changing the compatibility level invalidates it automatically.<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">ALTER<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">DATABASE AdventureWorks2012 <span style=\"color: blue\">SET <span style=\"color: blue\">COMPATIBILITY_LEVEL <span style=\"color: gray\">= 120<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GO<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">DROP TABLE <span style=\"font-size: 9.5pt;font-family: Consolas\">[AdventureWorks2012_DW]<span style=\"color: gray\">.dbo<span style=\"color: gray\">.bigTransactionHistory2;<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GO<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">select<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: gray\">*<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">into<span style=\"font-size: 9.5pt;font-family: Consolas\"> [AdventureWorks2012_DW]<span style=\"color: gray\">.dbo<span style=\"color: gray\">.bigTransactionHistory2<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">from<span style=\"font-size: 9.5pt;font-family: Consolas\"> dbo<span style=\"color: gray\">.bigTransactionHistory<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d0cece\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">option <span style=\"font-size: 9.5pt;font-family: Consolas;color: gray\">(<span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">maxdop<span style=\"font-size: 9.5pt;font-family: Consolas\"> 4<span style=\"color: gray\">)<\/span><\/span><\/span><\/span><\/span><\/div>\n<p>Here are the different results that I noticed:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_7_-_tableresulttest.jpg\" alt=\"blog_7_-_tableresulttest\" width=\"607\" height=\"299\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>First, I noticed an important reduction of the execution time between the two tests (60%). Nevertheless, as expected in the second test, the total working time is greater than in the first test (43%), but the CPU overhead is minimal compared to the overall performance gain of the SELECT INTO statement.<\/p>\n<p>I also noticed a bigger use of the C: disk bandwidth between the two tests:<\/p>\n<ul>\n<li><strong>Test 1<\/strong> (S<span lang=\"EN-GB\">ELECT INTO serialized &#8211; max throughput around 100 MB\/s)<\/span><\/li>\n<\/ul>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\">\u00a0<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_7_-_disk_ssd_througput_nonparallel.jpg\" alt=\"blog_7_-_disk_ssd_througput_nonparallel\" width=\"392\" height=\"104\" \/><\/span><\/p>\n<ul>\n<li><span lang=\"EN-GB\"><strong>Test 2<\/strong> (SELECT INTO in parallel &#8211; max throughput around 250 MB\/s)<\/span><\/li>\n<\/ul>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\">\u00a0<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_7_-_disk_ssd_througput_parallel.jpg\" alt=\"blog_7_-_disk_ssd_througput_parallel\" width=\"404\" height=\"106\" \/><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\">\u00a0<\/span><\/p>\n<p>As I have said above, the disk performance is important here. Indeed, we are trying to increase the speed of the insert operation that implies increasing the disk throughput. If we can reach the maximum bandwidth of the disk with a serialized SELECT INTO operator, performing an import of data with a parallelized SELECT INTO will not guarantee a greater performance.<\/p>\n<p>So, using the second test, I tried to confirm that the INSERT operator is used in parallel just for fun :-). We can confirm the INSERT operation in parallel by viewing the corresponding execution plan:<\/p>\n<ul>\n<li><span lang=\"EN-GB\"><strong>Test 1<\/strong> (SELECT INTO serialized)<\/span><\/li>\n<\/ul>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_7_-_bigTransactionHistory2_plan_nonparallel.jpg\" alt=\"blog_7_-_bigTransactionHistory2_plan_nonparallel\" width=\"586\" height=\"133\" \/><\/span><\/p>\n<p>By using the <em>sys.dm_os_tasks<\/em>, <em>sys.dm_os_threads<\/em> and <em>sys.dm_exec_requests<\/em> we can have a good overview of the dedicated threads used for the statement on a certain scheduler:<\/p>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">select<\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>ta<span style=\"color: gray\">.<\/span>scheduler_id<span style=\"color: gray\">,<\/span> <\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>wo<span style=\"color: gray\">.<\/span>os_thread_id<span style=\"color: gray\">,<\/span><\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>ta<span style=\"color: gray\">.<\/span>pending_io_count<span style=\"color: gray\">,<\/span><\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>ta<span style=\"color: gray\">.<\/span>pending_io_byte_average<span style=\"color: gray\">,<\/span><\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>ta<span style=\"color: gray\">.<\/span>task_state<\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">from<\/span><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_os_tasks<\/span> <span style=\"color: blue\">as<\/span> ta<\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span style=\"color: gray\">join<\/span> <span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_os_threads<\/span> <span style=\"color: blue\">as<\/span> wo<span>\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span style=\"color: blue\">on<\/span> wo<span style=\"color: gray\">.<\/span>worker_address <span style=\"color: gray\">=<\/span> ta<span style=\"color: gray\">.<\/span>worker_address<\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">where<\/span><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"> ta<span style=\"color: gray\">.<\/span>session_id <span style=\"color: gray\">=<\/span><span style=\"color: gray\">(<\/span><span style=\"color: blue\">select<\/span> session_id <\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span style=\"color: blue\">from<\/span> <span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_exec_requests<\/span> <span style=\"color: blue\">as<\/span> r<\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span>\u00a0<\/span><span style=\"color: gray\">cross<\/span> <span style=\"color: gray\">apply<\/span> <span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_exec_sql_text<\/span><span style=\"color: gray\">(<\/span>r<span style=\"color: gray\">.<\/span><span style=\"color: blue\">sql_handle<\/span><span style=\"color: gray\">)<\/span> <span style=\"color: blue\">as<\/span> t<\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span>\u00a0\u00a0 <\/span><span style=\"color: blue\">where<\/span> t<span style=\"color: gray\">.<\/span><span style=\"color: blue\">text<\/span> <span style=\"color: gray\">like<\/span> <span style=\"color: red\">&#8216;%bigTransactionHistory2%&#8217;<\/span><\/span><\/div>\n<div class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #D0CECE\"><span lang=\"EN-GB\" style=\"font-size: 9.5pt;font-family: Consolas\"><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span style=\"color: gray\">and<\/span> t<span style=\"color: gray\">.<\/span><span style=\"color: blue\">text<\/span> <span style=\"color: gray\">not<\/span> <span style=\"color: gray\">like<\/span> <span style=\"color: red\">&#8216;%sys.dm_exec_query_stats%&#8217;<\/span><span style=\"color: gray\">)<\/span><\/span><\/div>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_7_-_scheduler_task_nonparallel.jpg\" alt=\"blog_7_-_scheduler_task_nonparallel\" width=\"504\" height=\"45\" \/><\/span><\/p>\n<p>As expected, one thread was used for the first test on scheduler ID 3.<\/p>\n<ul>\n<li><span lang=\"EN-GB\"><strong>Test 2<\/strong> (SELECT INTO in parallel)<\/span><\/li>\n<\/ul>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_7_-_bigTransactionHistory2_plan_parallel.jpg\" alt=\"blog_7_-_bigTransactionHistory2_plan_parallel\" width=\"603\" height=\"112\" \/><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\">You will notice that all included Table Inserts are running in parallel.<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\">\u00a0<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-GB\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_7_-_scheduler_task_parallel.jpg\" alt=\"blog_7_-_scheduler_task_parallel\" width=\"504\" height=\"116\" \/><\/span><\/p>\n<p>Several threads mapped to a scheduler are also used by the statement during the data processing import.<br \/>\nIn this blog post I tried to demonstrate that using SELECT INTO in parallel can improve insert operation performances. In my opinion, this enhancement presents an interesting investment for many case scenarios with SQL Server. I&#8217;m very excited to test it in the real world with customer workloads. Please feel free to share your thoughts or your experience with me.<\/p>\n<p><span style=\"float: none;background-color: #ffffff;color: #333333;cursor: text;font-family: Georgia,'Times New Roman','Bitstream Charter',Times,serif;font-size: 16px;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: normal;text-align: left;text-decoration: none;text-indent: 0px;text-transform: none\">By David Barbarin<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A couple of weeks ago, I had to provide some best practices in term of architecture for a &#8220;heavy writes&#8221; environment that consists in importing data from different sources into SQL Server tables. At the customer place, I was asked about interesting new SQL Server features that could be used to increase the performance speed [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":3590,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[49,67,457,51,52],"type_dbi":[],"class_list":["post-3725","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-integration-middleware","tag-microsoft","tag-performance","tag-select-into","tag-sql-server","tag-sql-server-2014"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SQL Server 2014: SELECT INTO operators can run in parallel - dbi Blog<\/title>\n<meta name=\"description\" content=\"SQL Server 2014 provides an interesting enhancement of SELECT INTO statement that is often used in ETL environments. It is now possible to run in parallel insert operations by using the SELECT INTO command.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server 2014: SELECT INTO operators can run in parallel\" \/>\n<meta property=\"og:description\" content=\"SQL Server 2014 provides an interesting enhancement of SELECT INTO statement that is often used in ETL environments. It is now possible to run in parallel insert operations by using the SELECT INTO command.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-05-05T22:34:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"245\" \/>\n\t<meta property=\"og:image:height\" content=\"149\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Microsoft Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"SQL Server 2014: SELECT INTO operators can run in parallel\",\"datePublished\":\"2014-05-05T22:34:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/\"},\"wordCount\":1127,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg\",\"keywords\":[\"Microsoft\",\"Performance\",\"SELECT INTO\",\"SQL Server\",\"SQL Server 2014\"],\"articleSection\":[\"Application integration &amp; Middleware\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/\",\"name\":\"SQL Server 2014: SELECT INTO operators can run in parallel - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg\",\"datePublished\":\"2014-05-05T22:34:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"description\":\"SQL Server 2014 provides an interesting enhancement of SELECT INTO statement that is often used in ETL environments. It is now possible to run in parallel insert operations by using the SELECT INTO command.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg\",\"width\":245,\"height\":149},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server 2014: SELECT INTO operators can run in parallel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\",\"name\":\"Microsoft Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"caption\":\"Microsoft Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL Server 2014: SELECT INTO operators can run in parallel - dbi Blog","description":"SQL Server 2014 provides an interesting enhancement of SELECT INTO statement that is often used in ETL environments. It is now possible to run in parallel insert operations by using the SELECT INTO command.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server 2014: SELECT INTO operators can run in parallel","og_description":"SQL Server 2014 provides an interesting enhancement of SELECT INTO statement that is often used in ETL environments. It is now possible to run in parallel insert operations by using the SELECT INTO command.","og_url":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/","og_site_name":"dbi Blog","article_published_time":"2014-05-05T22:34:00+00:00","og_image":[{"width":245,"height":149,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg","type":"image\/jpeg"}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"SQL Server 2014: SELECT INTO operators can run in parallel","datePublished":"2014-05-05T22:34:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/"},"wordCount":1127,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg","keywords":["Microsoft","Performance","SELECT INTO","SQL Server","SQL Server 2014"],"articleSection":["Application integration &amp; Middleware"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/","url":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/","name":"SQL Server 2014: SELECT INTO operators can run in parallel - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg","datePublished":"2014-05-05T22:34:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"description":"SQL Server 2014 provides an interesting enhancement of SELECT INTO statement that is often used in ETL environments. It is now possible to run in parallel insert operations by using the SELECT INTO command.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_sqlserver2014.jpg","width":245,"height":149},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-select-into-operators-can-run-in-parallel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL Server 2014: SELECT INTO operators can run in parallel"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4","name":"Microsoft Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","caption":"Microsoft Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/3725","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=3725"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/3725\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/3590"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=3725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=3725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=3725"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=3725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}