{"id":566,"date":"2011-05-24T12:25:00","date_gmt":"2011-05-24T12:25:00","guid":{"rendered":"\/blogs\/paul\/post\/Benchmarking-Multiple-data-files-on-SSDs-(plus-Fusion-ios-latest-driver).aspx"},"modified":"2017-04-13T09:50:52","modified_gmt":"2017-04-13T16:50:52","slug":"benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/","title":{"rendered":"Benchmarking: Multiple data files on SSDs (plus the latest Fusion-io driver)"},"content":{"rendered":"<p><span style=\"font-family: verdana, geneva; font-size: small;\">It&#8217;s been a long time since the <\/span><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/\"><span style=\"font-family: verdana, geneva; font-size: small;\">last blog post on SSD benchmarking<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\">\u00a0&#8211; I&#8217;ve been busy! I&#8217;m starting up my benchmarking activities again and hope to post more frequently. You can see the whole progression of benchmarking posts <a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/category\/benchmarking\/\">here<\/a>.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">You can see my benchmarking hardware setup <\/span><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-hardware-setup\/\"><span style=\"font-family: verdana, geneva; font-size: small;\">here<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\">, with the addition of the Fusion-io ioDrive Duo 640GB drives that <\/span><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/new-hardware-to-play-with-fusion-io-ssds\/\"><span style=\"font-family: verdana, geneva; font-size: small;\">Fusion-io were nice enough to lend me<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\">. My test systems now have 16GB each and all tests were performed with the buffer pool ramped up, so memory allocation didn&#8217;t figure into the performance numbers. <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">In this recent set of tests I wanted to explore three questions: <\/span><\/p>\n<ol>\n<li>\n<div><span style=\"font-family: verdana, geneva; font-size: small;\">What kind of performance gain do I get upgrading from Fusion-io&#8217;s v1.2 driver to the v2.2 driver? <\/span><\/div>\n<\/li>\n<li>\n<div><span style=\"font-family: verdana, geneva; font-size: small;\">What is the sweet spot for the number of files on an SSD? <\/span><\/div>\n<\/li>\n<li>\n<div><span style=\"font-family: verdana, geneva; font-size: small;\">Does a 4Kb block size give any gains in performance for my test? <\/span><\/div>\n<\/li>\n<\/ol>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">To keep it simple I&#8217;m using one half of the 640GB drive (it&#8217;s two 320GB drives under the covers). To do this my test harness does the following: <\/span><\/p>\n<ul>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\">Formats the SSDs in one of three ways: <\/span>\n<ul>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\">Fusion-io basic format (the 320GB drive has 300GB capacity)<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\">Fusion-io improved write performance format (the 320GB drive has only 210GB capacity, 70% of normal)<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\">Fusion-io maximum write performance format (the 320GB drive has only 151GB capacity, 50% of normal)<\/span><\/li>\n<\/ul>\n<\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\">The SSD format is performed using Fusion-io&#8217;s ioManager tool<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\">Creates 1, 2, 4, 8, 16, 32, 64 or\u00a0128 data files, with the file sizes calculated to fill the SSDs<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\">My table structure is:<\/span><\/li>\n<\/ul>\n<blockquote><p><span style=\"font-family: 'courier new', courier; font-size: small;\">CREATE TABLE MyBigTable (<br \/>\nc1 UNIQUEIDENTIFIER ROWGUIDCOL DEFAULT NEWID (),<br \/>\nc2 DATETIME DEFAULT GETDATE (),<br \/>\nc3 CHAR (111) DEFAULT &#8216;a&#8217;,<br \/>\nc4 INT DEFAULT 1,<br \/>\nc5 INT DEFAULT 2,<br \/>\nc6 BIGINT DEFAULT 42);<br \/>\nGO <\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier; font-size: small;\">CREATE CLUSTERED INDEX MyBigTable_cl ON MyBigTable (c1);<br \/>\nGO <\/span><\/p><\/blockquote>\n<ul>\n<li>\n<div><span style=\"font-family: verdana, geneva; font-size: small;\">I have\u00a064 connections each inserting 2.5 million records into the table (with the loop code running server-side) for a total of 160 million records inserted, in batches of 1000 records per transaction. This works out to be about 37 GB of allocated space from the database. <\/span><\/div>\n<\/li>\n<\/ul>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The\u00a0clustered index on a random GUID is the easiest way to generate random reads and writes, and is a very common design pattern out in the field (even though it performs poorly) &#8211; for my purposes it&#8217;s perfect. <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">I tested\u00a0each of the eight data file layouts on the\u00a0following configurations (all using 1MB partition offsets, 64k NTFS allocation unit size, RAID was not involved): <\/span><\/p>\n<ul>\n<li>\n<div><span style=\"font-family: verdana, geneva; font-size: small;\">Log and data on a single 320GB SSD with the old v1.2.7 Fusion-io driver (each of the\u00a03 ways of formatting) <\/span><\/div>\n<\/li>\n<li>\n<div>\n<div>\n<div><span style=\"font-family: verdana, geneva; font-size: small;\">Log and data on a single 320GB SSD with the new v2.2.3 Fusion-io driver (each of the\u00a03 ways of formatting) <\/span><\/div>\n<\/div>\n<\/div>\n<\/li>\n<li>\n<div>\n<div>\n<div>\n<div><span style=\"font-family: verdana, geneva; font-size: small;\">Log and data on a single 320GB SSD with the new v2.2.3 Fusion-io driver and a 4Kb block size (each of the\u00a03 ways of formatting) <\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<div>\n<div><span style=\"font-family: verdana, geneva; font-size: small;\">That&#8217;s a total of\u00a09 configurations, with\u00a08 data file layouts in each configuration &#8211; making\u00a072 separate configurations. I ran each test 5 times and then took an average of the results &#8211; so altogether I ran\u00a0360 tests, for a cumulative test time of just over 1.43 million seconds (16.5 days) during April. <\/span><\/div>\n<\/div>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The test harness takes care of all of this except reformatting the drives, and also captures the wait stats for each test, making note of the most prevalent waits that make up the top 95% of all waits during the test. This uses the script from <\/span><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wait-statistics-or-please-tell-me-where-it-hurts\/\"><span style=\"font-family: verdana, geneva; font-size: small;\">this blog post<\/span><\/a><span style=\"font-family: verdana, geneva; font-size: small;\">. <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">On to the results&#8230; the wait stats are *really* interesting! <\/span><\/p>\n<p><span style=\"font-size: small;\"><strong>Note:<\/strong> the y-axes in the graphs below do not start at zero. All the graphs have the same axes so there is nothing to misunderstand. They are not misleading &#8211; and I make no apologies for my choice of axes &#8211; I want to show the difference between the various formats more clearly.<\/span><\/p>\n<p><strong><span style=\"font-family: verdana, geneva; font-size: small;\">v1.2.7 Fusion-io driver and 512-byte sector size <\/span><\/strong><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">\u00a0<img decoding=\"async\" src=\"\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v1.2512b-2.jpg\" alt=\"\" \/> <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The best performance I could get with the old driver was 3580 seconds for test completion, with 4 data files and the Improved Write format &#8211; a tiny amount less than the time for 8 data files. <\/span><\/p>\n<p><strong><span style=\"font-family: verdana, geneva; font-size: small;\">v2.2.3 Fusion-io driver and 512-byte sector size <\/span><\/strong><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">\u00a0<img decoding=\"async\" src=\"\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.2512b-2.jpg\" alt=\"\" \/> <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The best performance I could get with the new driver was\u00a02993 seconds for test completion, with\u00a08 data files and the Max Write format\u00a0&#8211; a tiny amount less than the time for other formats for 8 data files, and very close to the times for 4 data files. <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">On average across all the tests the new v2.2\u00a0Fusion-io driver gives a 20.5% performance boost over the old v1.2 driver, and for the regular format, <strong><span style=\"text-decoration: underline;\">the new v2.2\u00a0Fusion-io driver gives a 24% performance boost over the old v1.2 driver<\/span><\/strong>. It also (but I didn&#8217;t measure) reduces the\u00a0amount of system memory required to use the SSDs.\u00a0Good stuff! <\/span><\/p>\n<p><strong><span style=\"font-family: verdana, geneva; font-size: small;\">v2.2.3 Fusion-io driver and 4-Kb sector size <\/span><\/strong><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">\u00a0<img decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.24kb-2.jpg\" alt=\"\" \/> <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The performance using a 4-Kb sector size is roughly the same <strong><span style=\"text-decoration: underline;\">for my test<\/span><\/strong> compared to traditional 512-byte sector size. The most performance gain I got was 3% over using a 512-byte sector size, but on average across all tests the performance was very slightly (0.5%) lower. <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva;\"><span style=\"font-size: small;\"><strong>Wait Stats<\/strong> <\/span><\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The wait stats were very interesting.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The wait stats are presented in the following format: <\/span><\/p>\n<blockquote><p><span style=\"font-family: 'courier new', courier; font-size: small;\">WaitType\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Wait_S\u00a0\u00a0\u00a0\u00a0 Resource_S\u00a0 Signal_S\u00a0 WaitCount\u00a0 Percentage\u00a0 AvgWait_S\u00a0 AvgRes_S\u00a0 AvgSig_S<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8211;<br \/>\nPAGEIOLATCH_EX\u00a0 154611.39\u00a0\u00a0128056.51\u00a0\u00a0 26554.88\u00a0\u00a045295507\u00a0\u00a0 71.83\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00.0034\u00a0\u00a0\u00a0\u00a0 0.0028\u00a0\u00a0\u00a0 0.0006<br \/>\nPAGELATCH_UP\u00a0\u00a0\u00a0 37948.31\u00a0\u00a0\u00a036988.52\u00a0\u00a0\u00a0 959.79\u00a0\u00a0\u00a0\u00a02314370\u00a0\u00a0\u00a0 17.63\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a00.0164\u00a0\u00a0\u00a0\u00a0 0.016\u00a0\u00a0\u00a0\u00a0 0.0004<br \/>\nPAGELATCH_SH\u00a0\u00a0\u00a0 16976\u00a0\u00a0\u00a0\u00a0\u00a0\u00a013823.71\u00a0\u00a0\u00a0 3152.3\u00a0\u00a0\u00a0\u00a03751811\u00a0\u00a0\u00a0 7.89\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 0.0045\u00a0\u00a0\u00a0\u00a0 0.0037\u00a0\u00a0\u00a0 0.0008 <\/span><\/p><\/blockquote>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The columns are: <\/span><\/p>\n<ul>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">WaitType<\/span> &#8211; kind of obvious<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">Wait_S<\/span> &#8211; cumulative wait time in seconds, from a thread being <span style=\"font-family: 'courier new', courier;\">RUNNING<\/span>, going through <span style=\"font-family: 'courier new', courier;\">SUSPENDED<\/span>, back to <span style=\"font-family: 'courier new', courier;\">RUNNABLE<\/span> and then <span style=\"font-family: 'courier new', courier;\">RUNNING<\/span> again<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">Resource_S<\/span> &#8211; cumulative wait time in seconds while a thread was <span style=\"font-family: 'courier new', courier;\">SUSPENDED<\/span> (called the resource wait time)<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">Signal_S<\/span> &#8211; cumulative wait time in seconds while a thread was <span style=\"font-family: 'courier new', courier;\">RUNNABLE<\/span> (i.e. after being signalled that the resource wait has ended and waiting on the runnable queue to get the CPU again &#8211; called the signal wait time)<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">WaitCount<\/span> &#8211; number of waits of this type during the test<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">Percentage<\/span> &#8211; percentage of all waits during the test that had this type<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">AvgWait_S<\/span> &#8211; average cumulative wait time in seconds<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">AvgRes_S<\/span> &#8211; average resource wait time in seconds<\/span><\/li>\n<li><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">AvgSig_S<\/span> &#8211; average signal wait time in seconds<\/span><\/li>\n<\/ul>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">For a single file, the wait stats for all the various formatting options look like: <\/span><\/p>\n<blockquote><p><span style=\"font-family: 'courier new', courier; font-size: small;\">WaitType\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Wait_S\u00a0\u00a0\u00a0\u00a0 Resource_S\u00a0 Signal_S\u00a0 WaitCount\u00a0 Percentage\u00a0 AvgWait_S\u00a0 AvgRes_S\u00a0 AvgSig_S<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8211;<br \/>\nPAGEIOLATCH_EX\u00a0 226362.54\u00a0 193378.56\u00a0\u00a0 32983.98\u00a0 45742117\u00a0\u00a0 78.66\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0049\u00a0\u00a0\u00a0\u00a0 0.0042\u00a0\u00a0\u00a0 0.0007<br \/>\nPAGELATCH_UP\u00a0\u00a0\u00a0 36701.66\u00a0\u00a0 35760.67\u00a0\u00a0\u00a0 940.99\u00a0\u00a0\u00a0 2144533\u00a0\u00a0\u00a0 12.75\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0171\u00a0\u00a0\u00a0 \u00a00.0167\u00a0\u00a0\u00a0 0.0004<br \/>\nPAGELATCH_SH\u00a0\u00a0\u00a0 16775.05\u00a0\u00a0 13644.99\u00a0\u00a0\u00a0 3130.06\u00a0\u00a0 3542549\u00a0\u00a0\u00a0 5.83\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0047\u00a0\u00a0\u00a0 \u00a00.0039\u00a0\u00a0\u00a0 0.0009 <\/span><\/p><\/blockquote>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">With more files, the percentage of <span style=\"font-family: 'courier new', courier;\">PAGEIOLATCH_EX<\/span> waits increases, and by the time we get to\u00a08 files, <span style=\"font-family: 'courier new', courier;\">SOS_SCHEDULER_YIELD<\/span> has started to appear. At\u00a08 files, the wait stats for all the various formatting options look like: <\/span><\/p>\n<blockquote><p><span style=\"font-family: 'courier new', courier; font-size: small;\">WaitType\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Wait_S\u00a0\u00a0\u00a0\u00a0 Resource_S\u00a0 Signal_S\u00a0 WaitCount\u00a0 Percentage\u00a0 AvgWait_S\u00a0 AvgRes_S\u00a0 AvgSig_S<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8211;<br \/>\nPAGEIOLATCH_EX\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 244703.77\u00a0 210859.63\u00a0\u00a0 33844.14\u00a0 45169863\u00a0\u00a0 89.47\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0054\u00a0\u00a0\u00a0\u00a0 0.0047\u00a0\u00a0\u00a0 0.0007<br \/>\nSOS_SCHEDULER_YIELD\u00a0 12500.15\u00a0\u00a0 0.99\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 12499.16\u00a0 823658\u00a0\u00a0\u00a0\u00a0 4.57\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0152\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0152<br \/>\nPAGELATCH_SH\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 5777.54\u00a0\u00a0\u00a0 3749.18\u00a0\u00a0\u00a0\u00a0 2028.36\u00a0\u00a0 476618\u00a0\u00a0\u00a0\u00a0 2.11\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0121\u00a0\u00a0\u00a0\u00a0 0.0079\u00a0\u00a0\u00a0 0.0043 <\/span><\/p><\/blockquote>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">By\u00a016 files, the <span style=\"font-family: 'courier new', courier;\">PAGELATCH<\/span> waits have disappeared from the top 95%. As the number of files increases to 128, the <span style=\"font-family: 'courier new', courier;\">PAGEIOLATCH_EX<\/span> waits increase to just over 91% and the wait stats look like this for regular format: <\/span><\/p>\n<blockquote><p><span style=\"font-family: 'courier new', courier; font-size: small;\">WaitType\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Wait_S\u00a0\u00a0\u00a0\u00a0\u00a0Resource_S\u00a0 Signal_S\u00a0 WaitCount\u00a0 Percentage\u00a0 AvgWait_S\u00a0 AvgRes_S\u00a0 AvgSig_S<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8211;<br \/>\nPAGEIOLATCH_EX\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 304106.32\u00a0 273671\u00a0\u00a0\u00a0\u00a0\u00a0 30435.32\u00a0 43478489\u00a0\u00a0 91.25\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.007\u00a0\u00a0\u00a0\u00a0\u00a0 0.0063\u00a0\u00a0\u00a0 0.0007<br \/>\nSOS_SCHEDULER_YIELD\u00a0 16733\u00a0\u00a0\u00a0\u00a0\u00a0 1.35\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 16731.65\u00a0 889147\u00a0\u00a0\u00a0\u00a0 5.02\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0188\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0188 <\/span><\/p><\/blockquote>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">What does this mean? It&#8217;s obvious from the wait stats that as I increase the number of data files on the drive, the average resource wait time for each <span style=\"font-family: 'courier new', courier;\">PAGEIOLATCH_EX<\/span> wait increases from 4.2ms for 1 file up to 6.3ms for 128 files &#8211; 50% worse, with the signal wait time static at 0.7ms. <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">But look at the wait stats for 128 files using the Maximum Write format: <\/span><\/p>\n<blockquote><p><span style=\"font-family: 'courier new', courier; font-size: small;\">WaitType\u00a0\u00a0\u00a0\u00a0\u00a0 Wait_S\u00a0Resource_S\u00a0 Signal_s\u00a0 WaitCount\u00a0 Percentage\u00a0 AvgWait_S\u00a0 AvgRes_S\u00a0 AvgSig_S<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8211;\u00a0 &#8212;&#8212;&#8211;<br \/>\nPAGEIOLATCH_EX\u00a0\u00a0\u00a0\u00a0\u00a0 196322.97\u00a0166602.88\u00a0\u00a0 29720.09\u00a0 45435521\u00a0 88.66\u00a0\u00a0\u00a0\u00a0\u00a0 0.0043\u00a00.0037\u00a0\u00a0 0.0007<br \/>\nSOS_SCHEDULER_YIELD\u00a0 16182.48\u00a01.1\u00a0\u00a0\u00a0\u00a0 16181.38\u00a0 828595\u00a0 7.31\u00a0\u00a0\u00a0\u00a0\u00a0 0.0195\u00a00\u00a0\u00a0 0.0195 <\/span><\/p><\/blockquote>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">The average resource wait time for the <span style=\"font-family: 'courier new', courier;\">PAGEIOLATCH_EX<\/span> waits has dropped from 6.3ms to 3.7ms! But isn&#8217;t <span style=\"font-family: 'courier new', courier;\">PAGEIOLATCH_EX<\/span> a wait type that&#8217;s for a page *read*? Well, yes, but what I think is happening is that the buffer pool is having to force pages out to disk to make space for the pages being read in to be inserted into (which I believe is included in the <span style=\"font-family: 'courier new', courier;\">PAGEIOLATCH_EX<\/span> wait time) &#8211; and when the SSD is formatted with the improved write algorithm, this is faster and so the <span style=\"font-family: 'courier new', courier;\">PAGEIOLATCH_EX<\/span> resource wait time decreases. <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">But why the gradual decrease\u00a0in <span style=\"font-family: 'courier new', courier;\">PAGELATCH<\/span> waits and increase in <span style=\"font-family: 'courier new', courier;\">SOS_SCHEDULER_YIELD<\/span> waits as the number of files increases? <\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">I went back and ran a single file test and used the <span style=\"font-family: 'courier new', courier;\">sys.dm_os_waiting_tasks<\/span> DMV (see <a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/advanced-performance-troubleshooting-waits-latches-spinlocks\/\">this blog post<\/a>)\u00a0to see what the various threads are waiting for. Here&#8217;s some example output: <\/span><\/p>\n<blockquote><p><span style=\"font-family: verdana, geneva; font-size: small;\"><span style=\"font-family: 'courier new', courier;\">session_id\u00a0 wait_duration_ms\u00a0 wait_type\u00a0\u00a0\u00a0\u00a0 resource_description<br \/>\n&#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;&#8212;&#8212;-\u00a0 &#8212;&#8212;&#8212;&#8212;\u00a0 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n79\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 11\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n80\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 16\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n94\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n101\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 15\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n111\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 25\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n110\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n75\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 6\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n78\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n88\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n107\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 12\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n109\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 25\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n113\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 20\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PAGELATCH_UP\u00a0 5:1:1520544<br \/>\n<\/span>.<br \/>\n. <\/span><\/p><\/blockquote>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">Dividing 1520544 by 8088 gives exactly 188.\u00a0Running\u00a0the same query a few seconds later gives most of the threads waiting on\u00a0resource 5:1:1544808, another exact multiple of 8088. These resources are <strong><span style=\"text-decoration: underline;\">PFS pages<\/span><\/strong>! What we&#8217;re seeing is PFS page contention, just like you can get in tempdb with lots of concurrent threads creating and dropping temp tables. In this case, I have 64 concurrent threads doing inserts that are causing page splits, which requires page allocations. As the number of files increases, the amount of PFS page contention decreases. It disappears after 8 files because I&#8217;ve only got 8 cores, so there can only be 8 threads running at once (one per SQLOS scheduler, with the others <span style=\"font-family: 'courier new', courier;\">SUSPENDED<\/span> on the waiter list or waiting in the <span style=\"font-family: 'courier new', courier;\">RUNNABLE<\/span> queue).<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">From 16 to 128 files, the wait stats hardly change and the performance (in the Improved Write and Max Write formats) only slightly degrades (5%) with each doubling of the number of files. Without deeper investigation, I&#8217;m putting this down to increased amounts of metadata to deal with &#8211; maybe with more to do when searching the allocation cache for the allocation unit of the clustered index. If I have time I&#8217;ll dig in and investigate exactly why.<\/span><\/p>\n<p><span style=\"font-size: small;\">The <span style=\"font-family: 'courier new', courier;\">SOS_SCHEDULER_YIELD<\/span> waits are just because the threads are able to do more before having to wait, and so they&#8217;re hitting voluntary yield points in the code &#8211; the workload is becoming more CPU bound.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva;\"><span style=\"font-size: small;\"><strong>Summary<\/strong> <\/span><\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">I&#8217;ve clearly shown that the new Fusion-io driver gives a nice boost compared to the older one &#8211; very cool.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">I&#8217;ve also shown that the number of files on the SSD does have an affect on performance too &#8211; with the sweet spot appearing to be the number of processor cores (just an observation, definitely NOT a recommendation). I&#8217;d love to see someone do similar tests on a 16-way, 32-way or higher (or lend me one to play with :-)<\/span><\/p>\n<p><span style=\"font-size: small;\">[Edit: I discussed the results with my friend Thomas Kejser on the SQLCAT team and he sees the same behavior on a 64-way running the same benchmark (in fact we screen-shared on a 64-way system with 2TB and 4 640GB Fusion-io cards this weekend). He posted some more investigations on his blog &#8211; see <a href=\"http:\/\/kejser.org\/secret-scale-sauce-heavy-singleton-insert-spinlocks\/\" target=\"_blank\">here<\/a>.]<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">And finally, I showed that for my workload, using a 4-Kb sector size did not improve performance.<\/span><\/p>\n<p><span style=\"font-family: verdana, geneva; font-size: small;\">I&#8217;d call that a successful test &#8211; *really* interesting!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>It&#8217;s been a long time since the last blog post on SSD benchmarking\u00a0&#8211; I&#8217;ve been busy! I&#8217;m starting up my benchmarking activities again and hope to post more frequently. You can see the whole progression of benchmarking posts here. You can see my benchmarking hardware setup here, with the addition of the Fusion-io ioDrive Duo [&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,66,89,101],"tags":[],"class_list":["post-566","post","type-post","status-publish","format-standard","hentry","category-benchmarking","category-performance-tuning","category-ssds","category-wait-stats"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Benchmarking: Multiple data files on SSDs (plus the latest Fusion-io driver) - 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-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Benchmarking: Multiple data files on SSDs (plus the latest Fusion-io driver) - Paul S. Randal\" \/>\n<meta property=\"og:description\" content=\"It&#8217;s been a long time since the last blog post on SSD benchmarking\u00a0&#8211; I&#8217;ve been busy! I&#8217;m starting up my benchmarking activities again and hope to post more frequently. You can see the whole progression of benchmarking posts here. You can see my benchmarking hardware setup here, with the addition of the Fusion-io ioDrive Duo [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/\" \/>\n<meta property=\"og:site_name\" content=\"Paul S. Randal\" \/>\n<meta property=\"article:published_time\" content=\"2011-05-24T12:25:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T16:50:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.24kb-2.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=\"9 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-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/\",\"name\":\"Benchmarking: Multiple data files on SSDs (plus the latest Fusion-io driver) - Paul S. Randal\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.24kb-2.jpg\",\"datePublished\":\"2011-05-24T12:25:00+00:00\",\"dateModified\":\"2017-04-13T16:50:52+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#primaryimage\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.24kb-2.jpg\",\"contentUrl\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.24kb-2.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Benchmarking: Multiple data files on SSDs (plus the latest Fusion-io driver)\"}]},{\"@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: Multiple data files on SSDs (plus the latest Fusion-io driver) - 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-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/","og_locale":"en_US","og_type":"article","og_title":"Benchmarking: Multiple data files on SSDs (plus the latest Fusion-io driver) - Paul S. Randal","og_description":"It&#8217;s been a long time since the last blog post on SSD benchmarking\u00a0&#8211; I&#8217;ve been busy! I&#8217;m starting up my benchmarking activities again and hope to post more frequently. You can see the whole progression of benchmarking posts here. You can see my benchmarking hardware setup here, with the addition of the Fusion-io ioDrive Duo [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/","og_site_name":"Paul S. Randal","article_published_time":"2011-05-24T12:25:00+00:00","article_modified_time":"2017-04-13T16:50:52+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.24kb-2.jpg","type":"","width":"","height":""}],"author":"Paul Randal","twitter_misc":{"Written by":"Paul Randal","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/","name":"Benchmarking: Multiple data files on SSDs (plus the latest Fusion-io driver) - Paul S. Randal","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.24kb-2.jpg","datePublished":"2011-05-24T12:25:00+00:00","dateModified":"2017-04-13T16:50:52+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#primaryimage","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.24kb-2.jpg","contentUrl":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2011\/5\/v2.24kb-2.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-multiple-data-files-on-ssds-plus-the-latest-fusion-io-driver\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/paul\/"},{"@type":"ListItem","position":2,"name":"Benchmarking: Multiple data files on SSDs (plus the latest Fusion-io driver)"}]},{"@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\/566","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=566"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/566\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/media?parent=566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/categories?post=566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/tags?post=566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}