{"id":739,"date":"2010-03-08T10:39:00","date_gmt":"2010-03-08T10:39:00","guid":{"rendered":"\/blogs\/paul\/post\/Benchmarking-1-TB-table-population-(part-4-network-optimization).aspx"},"modified":"2017-04-13T09:54:05","modified_gmt":"2017-04-13T16:54:05","slug":"benchmarking-1-tb-table-population-part-4-network-optimization","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/","title":{"rendered":"Benchmarking: 1-TB table population (part 4: network optimization)"},"content":{"rendered":"<p>\n<font face=\"verdana,geneva\" size=\"2\">Blog&nbsp;posts in this series: <\/font>\n<\/p>\n<ul>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">For the hardware&nbsp;setup I&#39;m using, see <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-hardware-setup\/\"><font face=\"verdana,geneva\" size=\"2\">this post<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">. <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">For an explanation of log growth and its effect on perf, see <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/interesting-case-of-watching-log-file-growth-during-a-perf-test\/\"><font face=\"verdana,geneva\" size=\"2\">this post<\/font><\/a><font size=\"2\"><font face=\"verdana,geneva\">.<\/font><font face=\"verdana,geneva\"> <\/font><\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">For the baseline performance measurements for this benchmark, see <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-1-the-baseline\/\"><font face=\"verdana,geneva\" size=\"2\">this post<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">. <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">For the increasing performance through log file IO optimization, see <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-2-optimizing-log-block-io-size-and-how-log-io-works\/\"><font face=\"verdana,geneva\" size=\"2\">this post<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">. <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">For the increasing performance through separation of data and log files, see <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-3-separating-data-and-log-files\/\"><font face=\"verdana,geneva\" size=\"2\">this post<\/font><\/a><font size=\"2\"><font face=\"verdana,geneva\">.<\/font><font face=\"verdana,geneva\"> <\/font><\/font>\n\t<\/div>\n<\/li>\n<\/ul>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\">In the <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-3-separating-data-and-log-files\/\"><font size=\"2\">previous post<\/font><\/a><font size=\"2\"> in the series, I&nbsp;examined the effects of separating the data and log files (one file&nbsp;each) to different RAID arrays. It was very obvious that&nbsp;separation&nbsp;gave a performance boost, and that having the&nbsp;portion of the database with the highest I\/O write throughput requirements on the faster array (the 8-drive 15k SCSI RAID10) produced the biggest gain. <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Now &#8211; a confession.&nbsp; In the last post, when I posted it I found that moving the data an 8-drive 7.2k SATA RAID10 array was the best approach. *But* during the testing for this post, I found that one of my tests had screwed up and only half the client threads had run. You&#39;ll notice in that post I went back in and edited it to explain that and update the graph and results. I&#39;ve now augmented my test harness with a way to check that all client threads are running &#8211; to make sure the tests are apples to apples, rather than apples to pomegranates :-) <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">So &#8211; the best I&#39;ve been able to do so far with the tests is creating 1TB of data using 128 connections (each creating 1\/128th TB using inserts with default values) with the single data file on an 8-drive 15k SCSI RAID array (pre-created to 1TB) and the log file on an 8-drive 7.2k SATA RAID10 array (pre-created to 256MB with 50MB autogrowth) in 20842 seconds. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Lots of people have been asking how my network is setup in these tests. Here&#39;s what I&#39;ve been running with (all 1GB ethernet): <\/font>\n<\/p>\n<ul>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">1 NIC from a Broadcom BCM5708C NetXtreme II GigE card on the 10.x.x.x network <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">1 NIC from a Broadcom BCM5708C NetXtreme II GigE card on the 192.168.x.x network <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">2 x PowerConnect 5424 24-port iSCSI optimized switches&nbsp;, with no separation of traffic <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">The 10.x.x.x server NIC connected to all iSCSI arrays <\/font>\n\t<\/div>\n<\/li>\n<\/ul>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Over the last couple of weeks I&#39;ve been playing around with the network setup to make sure things are optimized, and this post will describe what I did and what effect it had. In all the tests below, I kept the dat aon the faster SCSI array and the log on the slower SATA array. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">I&#39;m very grateful to the help I received from Wes Brown (<\/font><a href=\"https:\/\/twitter.com\/WesbrownSQL\"><font face=\"verdana,geneva\" size=\"2\">twitter<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">|<\/font><a href=\"http:\/\/www.sqlservercentral.com\/blogs\/sqlmanofmystery\/\"><font face=\"verdana,geneva\" size=\"2\">blog<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">) and Denny Cherry (<\/font><a href=\"https:\/\/twitter.com\/mrdenny\"><font face=\"verdana,geneva\" size=\"2\">twitter<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">|<\/font><a href=\"http:\/\/itknowledgeexchange.techtarget.com\/sql-server\/\"><font face=\"verdana,geneva\" size=\"2\">blog<\/font><\/a><font size=\"2\"><font face=\"verdana,geneva\">) to the technical questions and WTF?s I sent (and to anyone else on twitter I may have forgotten!).<\/font><font face=\"verdana,geneva\"> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><strong>1) Separation of network traffic<\/strong> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">I decided to make one of the 5424 switches dedicated to iSCSI traffic on the 10.x.x.x network and the other for general network activity, including connecting to the management ports on the MD3000s. Turns out that I didn&#39;t really need to, as each 5424 can handle 48GB of throughput, way more than I&#39;m generating. But hey ho, at least the wiring in the back of the 42U rack is a little tidier now :-) <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Running the 128-way test with the new configuration gave a test time of 21252 seconds, slightly slower than the best time without separation! This was the first of the WTF?s. Until I realized that I hadn&#39;t actually removed any network bottleneck at all. I can&#39;t explain why things are slightly slower here, so I decided to take the switches out of the equation. My suspicion is that if I ran the test ten times, I&#39;d get ten different results, but within a standard deviation of the median. So &#8211; no cause for concern. (In fact, I&#39;m going to try this as part of the next set of tests.) <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><strong>2) Direct connections to the iSCSI arrays<\/strong> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">I configured another NIC (one from an Intel PRO\/1000 PT Dual Port GigE card) and then had one NIC directly connected to one of the RAID controllers on the SCSI MD3000 (only one configured volume, so no concerns about having multiple volumes suddenly switching over to a non-optimal RAID controller) and the other NIC directly connected to the SATA MD3000. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Running the 128-way test with the new configuration gave&nbsp;a test&nbsp;time of 21859 seconds, slower than test #1. Very surprising &#8211; I expected to get some *gain* so I looked at the peak throughput of the arrays: <\/font>\n<\/p>\n<ul>\n<li><font face=\"verdana,geneva\" size=\"2\">For test 1, peak SATA was 50500 bytes\/sec and peak SCSI was 106012 bytes\/sec.<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">For test 2, peak SATA was 46923 bytes\/sec and peak SCSI was 107708 bytes\/sec.<\/font><\/li>\n<\/ul>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Things are slower with the network bottleneck removed. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><strong>3) Upgrading 5424 switch firmware and reconfiguring<\/strong> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Although the 5424 switches are supposed to come iSCSI optimized, I thought I&#39;d flatten them and reconfigure the. I got the latest version of the switch firmware and re-flashed both switches. I think configured the 10.x.x.x one specifically for iSCSI using <\/font><a href=\"http:\/\/en.community.dell.com\/techcenter\/storage\/w\/wiki\/configuring-a-powerconnect-5424-or-5448-switch-for-use-with-an-iscsi-storage-system\"><font face=\"verdana,geneva\" size=\"2\">this excellent Dell whitepaper<\/font><\/a><font size=\"2\"><font face=\"verdana,geneva\">.<\/font><font face=\"verdana,geneva\"> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Running the 128-way test with the new configuration gave a test time of 20745 seconds. Finally an improvement, but nothing major, and still possibly just a statistical variation. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><strong>4) Upgrading the NIC drivers<\/strong> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Next I figured I&#39;d bring the NICs up to the latest driver versions so upgraded all the NICs on all the servers. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Running the 128-way test with the new configuration gave a test time of 21743 seconds. Hmmm. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><strong>5) Homogenizing the network paths<\/strong> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">At this point I started wondering if the Broadcom and Intel NICs had different characteristics so I decided to use the two Intel NICs for the iSCSI traffic. I also enabled jumbo frames. The Intel NICs have three setting for jumbo frames &#8211; off, 4088 bytes or 9014 bytes. The MD3000s can only go up to 9000 bytes, so I chose 4088 bytes and configured the MD3000 iSCSI ports to use the same. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Running the 128-way test with the new configuration gave a test time of 21526 seconds &#8211; nothing to write home about. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">None of the network configuration changes I made had much effect on performance, apart from removing the network bottleneck, which made performance slightly worse overall. I checked other stuff like <\/font><a href=\"http:\/\/blogs.msdn.com\/b\/psssql\/archive\/2010\/02\/21\/tcp-offloading-again.aspx\"><font face=\"verdana,geneva\" size=\"2\">TCP offloading<\/font><\/a><font size=\"2\"><font face=\"verdana,geneva\">, but that wasn&#39;t enabled. My suspicion was that by removing the network bottleneck, I unmasked a SQL Server contention issue with my 128-connection test. I decided to try fewer client connections.<\/font><font face=\"verdana,geneva\"> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Here are the results: <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/4connections.jpg\" alt=\"\" width=\"485\" height=\"273\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">There&#39;s clearly a SQL Server bottleneck that&#39;s being alleviated by reducing the number of connections and allowing the throughput to each array&nbsp;to increase slightly. With 8 connections, SQL Server isn&#39;t being driven hard enough and the elapsed time increases again, and this is reflected in the array throughput measurements too (a 10-15% drop compared to the 16-way test). One thing I forgot to do was examine the distribution of wait types while these tests were running, but my guess would be the bottleneck was in the transaction log manager. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><strong>Summary <\/strong><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">By separating the network traffic and moving to two iSCSI NICs, I removed the network bottleneck I had (see the image at the bottom of the last post) and replaced it with a SQL Server bottleneck. Here&#39;s a snapshot of network utilization with the new setup: <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">&nbsp;<img decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/42iscsinics.jpg\" alt=\"\" width=\"912\" height=\"240\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">In the next set of tests, I&#39;m going to look at the effect of altering the transaction log auto-growth size, and pre-allocation size. In all the tests so far, the log has grown from the pre-allocated 256MB to somewhere between 6.5-8GB. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Should be interesting &#8211; stay tuned. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">PS Yes, I&#39;ll be doing a bunch of stuff with the Fusion-io drives too &#8211; be patient! :-) <\/font><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Blog&nbsp;posts in this series: For the hardware&nbsp;setup I&#39;m using, see this post. For an explanation of log growth and its effect on perf, see this post. For the baseline performance measurements for this benchmark, see this post. For the increasing performance through log file IO optimization, see this post. For the increasing performance through separation [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,45,66],"tags":[],"class_list":["post-739","post","type-post","status-publish","format-standard","hentry","category-benchmarking","category-hardware","category-performance-tuning"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Benchmarking: 1-TB table population (part 4: network optimization) - Paul S. Randal<\/title>\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.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Benchmarking: 1-TB table population (part 4: network optimization) - Paul S. Randal\" \/>\n<meta property=\"og:description\" content=\"Blog&nbsp;posts in this series: For the hardware&nbsp;setup I&#039;m using, see this post. For an explanation of log growth and its effect on perf, see this post. For the baseline performance measurements for this benchmark, see this post. For the increasing performance through log file IO optimization, see this post. For the increasing performance through separation [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/\" \/>\n<meta property=\"og:site_name\" content=\"Paul S. Randal\" \/>\n<meta property=\"article:published_time\" content=\"2010-03-08T10:39:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T16:54:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/4connections.jpg\" \/>\n<meta name=\"author\" content=\"Paul Randal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Randal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/\",\"name\":\"Benchmarking: 1-TB table population (part 4: network optimization) - Paul S. Randal\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/4connections.jpg\",\"datePublished\":\"2010-03-08T10:39:00+00:00\",\"dateModified\":\"2017-04-13T16:54:05+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#primaryimage\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/4connections.jpg\",\"contentUrl\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/4connections.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Benchmarking: 1-TB table population (part 4: network optimization)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\",\"name\":\"Paul S. Randal\",\"description\":\"In Recovery...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\",\"name\":\"Paul Randal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"caption\":\"Paul Randal\"},\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/paul\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Benchmarking: 1-TB table population (part 4: network optimization) - Paul S. Randal","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.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/","og_locale":"en_US","og_type":"article","og_title":"Benchmarking: 1-TB table population (part 4: network optimization) - Paul S. Randal","og_description":"Blog&nbsp;posts in this series: For the hardware&nbsp;setup I&#39;m using, see this post. For an explanation of log growth and its effect on perf, see this post. For the baseline performance measurements for this benchmark, see this post. For the increasing performance through log file IO optimization, see this post. For the increasing performance through separation [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/","og_site_name":"Paul S. Randal","article_published_time":"2010-03-08T10:39:00+00:00","article_modified_time":"2017-04-13T16:54:05+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/4connections.jpg","type":"","width":"","height":""}],"author":"Paul Randal","twitter_misc":{"Written by":"Paul Randal","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/","name":"Benchmarking: 1-TB table population (part 4: network optimization) - Paul S. Randal","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/4connections.jpg","datePublished":"2010-03-08T10:39:00+00:00","dateModified":"2017-04-13T16:54:05+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#primaryimage","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/4connections.jpg","contentUrl":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/3\/4connections.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-4-network-optimization\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/paul\/"},{"@type":"ListItem","position":2,"name":"Benchmarking: 1-TB table population (part 4: network optimization)"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/","name":"Paul S. Randal","description":"In Recovery...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/paul\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce","name":"Paul Randal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","caption":"Paul Randal"},"sameAs":["http:\/\/3.209.169.194\/blogs\/paul"],"url":"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/comments?post=739"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/739\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/media?parent=739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/categories?post=739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/tags?post=739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}