{"id":665,"date":"2010-08-10T17:31:00","date_gmt":"2010-08-10T17:31:00","guid":{"rendered":"\/blogs\/paul\/post\/Benchmarking-Introducing-SSDs-(Part-3-random-inserts).aspx"},"modified":"2013-01-01T23:56:28","modified_gmt":"2013-01-02T07:56:28","slug":"benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/","title":{"rendered":"Benchmarking: Introducing SSDs (Part 3: random inserts with wait stats details)"},"content":{"rendered":"<p>\n<font face=\"verdana,geneva\" size=\"2\">Last time I posted about SSDs I presented the findings from sequential inserts with a variety of configurations and basically concluded that&nbsp;SSDs do not provide a substantial gain over SCSI storage (that is not overloaded) &#8211; see <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-2-sequential-inserts\/\"><font face=\"verdana,geneva\" size=\"2\">this blog post<\/font><\/a><font face=\"verdana,geneva\" size=\"2\"> for more details. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">You can see my benchmarking hardware setup <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-hardware-setup\/\"><font face=\"verdana,geneva\" size=\"2\">here<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">, with the addition of the Fusion-io ioDrive Duo 640GB drives that <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/new-hardware-to-play-with-fusion-io-ssds\/\"><font face=\"verdana,geneva\" size=\"2\">Fusion-io were nice enough to lend me<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">. (For the next set of benchmarks I&#39;ve just upgraded to 16GB of memory and added the second 640GB Fusion-io Duo, for a total of 1.2TB&#8230; watch this space!). <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">In this set of tests I wanted to see how the SSDs behaved for random reads and writes. To do this my test harness does the following: <\/font>\n<\/p>\n<ul>\n<li><font face=\"verdana,geneva\" size=\"2\">Formats the SSDs in one of three ways: <\/font>\n<ul>\n<li><font face=\"verdana,geneva\" size=\"2\">Fusion-io basic format (each 320GB drive has 300GB capacity)<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">Fusion-io improved write performance format (each 320GB drive has only 210GB capacity, 70% of normal)<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">Fusion-io maximum write performance format (each 320GB drive has only 151GB capacity, 50% of normal)<\/font><\/li>\n<\/ul>\n<\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">The SSD format is performed using Fusion-io&#39;s ioManager tool, with their latest publicly-released driver (1.2.7.1). <\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">Creates 1, 2, 4, 8, or 16 data files, with the file sizes calculated to fill the SSDs<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">My table structure is:<\/font><\/li>\n<\/ul>\n<blockquote>\n<blockquote>\n<p>\n\t\t<font face=\"courier new,courier\" size=\"2\">CREATE TABLE MyBigTable (<br \/>\n\t\t&nbsp;&nbsp;&nbsp; c1 UNIQUEIDENTIFIER ROWGUIDCOL DEFAULT NEWID (),<br \/>\n\t\t&nbsp;&nbsp;&nbsp; c2 DATETIME DEFAULT GETDATE (),<br \/>\n\t\t&nbsp;&nbsp;&nbsp; c3 CHAR (111) DEFAULT &#39;a&#39;,<br \/>\n\t\t&nbsp;&nbsp;&nbsp; c4 INT DEFAULT 1,<br \/>\n\t\t&nbsp;&nbsp;&nbsp; c5 INT DEFAULT 2,<br \/>\n\t\t&nbsp;&nbsp;&nbsp; c6 BIGINT DEFAULT 42);&nbsp;<br \/>\n\t\tGO <\/font>\n\t\t<\/p>\n<p>\n\t\t<font face=\"verdana,geneva\" size=\"2\"><font face=\"courier new,courier\">CREATE CLUSTERED INDEX MyBigTable_cl ON MyBigTable (c1);<br \/>\n\t\tGO<\/font> <\/font>\n\t\t<\/p>\n<\/blockquote>\n<\/blockquote>\n<ul>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">I have 16 connections each inserting 2 million records into the table (with the loop code running server-side) <\/font>\n\t<\/div>\n<\/li>\n<\/ul>\n<p>\n<font size=\"2\">Now before anyone complains, yes, this is a clustered index on a random GUID. It&#39;s 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&#39;s perfect.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">I tested&nbsp;each of the five data file layouts on the&nbsp;following configurations (all using 1MB partition offsets, 64k NTFS allocation unit size, 128k RAID stripe size &#8211; where applicable): <\/font>\n<\/p>\n<ul>\n<li><font face=\"verdana,geneva\" size=\"2\">Data round-robin between two RAID-10 SCSI (each with 4 x 300GB 15k and one server NIC), log on RAID-10 SATA (8 x 1TB 7.2k) <\/font><\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">Data on two 320GB SSDs in RAID-0 (each of the&nbsp;3 ways of formatting), log on RAID-10 SATA (8 x 1TB 7.2k) <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">Log and data on two 320GB SSDs in RAID-0 (each of the&nbsp;3 ways of formatting) <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">Log and data on two 320GB SSDs in RAID-1&nbsp;(each of the&nbsp;3 ways of formatting)&nbsp;&nbsp; <\/font>\n\t<\/div>\n<\/p><\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">Log and data on single 320GB SSD (each of the&nbsp;3 ways of formatting) <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">Log and data on separate 320GB SSDs (each of the&nbsp;3 ways of formatting) <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\" size=\"2\">Log and data round-robin between two 320GB SSDs (each of the&nbsp;3 ways of formatting) <\/font>\n\t<\/div>\n<\/li>\n<\/ul>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">That&#39;s a total of&nbsp;19 configurations, with 5 data file layouts in each configuration &#8211; making&nbsp;95 separate configurations. I ran each test 5 times and then took an average of the results &#8211; so altogether I ran&nbsp;475 tests, for a cumulative test time of just less than&nbsp;250 thousand&nbsp;seconds (2.9 days) at the end of July. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">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. The wait stats will be presented in the following format:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26833.45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26822.85&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 867558&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 75.88<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7097.77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6647.26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 450.51&nbsp;&nbsp;&nbsp;&nbsp; 3221475&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20.0<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">The columns are:<\/font>\n<\/p>\n<ul>\n<li><font face=\"verdana,geneva\" size=\"2\"><font face=\"courier new,courier\">WaitType<\/font> &#8211; kind of obvious<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\"><font face=\"courier new,courier\">Wait_S<\/font> &#8211; cumulative wait time in seconds, from a thread being <font face=\"courier new,courier\">RUNNING<\/font>, going through <font face=\"courier new,courier\">SUSPENDED<\/font>, back to <font face=\"courier new,courier\">RUNNABLE<\/font> and then <font face=\"courier new,courier\">RUNNING<\/font> again<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\"><font face=\"courier new,courier\">Resource_S<\/font> &#8211; cumulative wait time in seconds while a thread was <font face=\"courier new,courier\">SUSPENDED<\/font> (called the resource wait time)<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\"><font face=\"courier new,courier\">Signal_S<\/font> &#8211; cumulative wait time in seconds while a thread was <font face=\"courier new,courier\">RUNNABLE<\/font> (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)<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\"><font face=\"courier new,courier\">WaitCount<\/font> &#8211; number of waits of this type during the test<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\"><font face=\"courier new,courier\">Percentage<\/font> &#8211; percentage of all waits during the test that had this type<\/font><\/li>\n<\/ul>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">On to the results&#8230; <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\"><strong>Data on SCSI RAID-10, log on SATA RAID-10<\/strong> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">&nbsp;<img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/1-logsatadatascsi.jpg\" alt=\"\" width=\"581\" height=\"365\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Once again this shows what I&#39;ve shown a few times before &#8211; on SCSI having multiple data files on the two RAID arrays gives a performance boost. The two-file case is going from a single RAID array to two RAID arrays &#8211; bound to get a performance gain &#8211; and it gets a 35% performance boost &#8211; 6 times the boost I got from messing around with multiple files for the sequential inserts case last time (see <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-2-sequential-inserts\/\"><font face=\"verdana,geneva\" size=\"2\">here<\/font><\/a><font face=\"verdana,geneva\" size=\"2\"> and <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-do-multiple-data-files-make-a-difference\/\"><font face=\"verdana,geneva\" size=\"2\">here<\/font><\/a><font face=\"verdana,geneva\" size=\"2\"> for details). <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">The best performance I could get from having data on the SCSI arrays was 1595 seconds.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Representative wait stats for a run of this test &#8211; one file:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 28993.08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 28984.66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 647973&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 75.53<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7333.36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6883.82&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 449.54&nbsp;&nbsp;&nbsp;&nbsp; 3223809&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 19.10<br \/>\n\tSLEEP_BPOOL_FLUSH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1786.18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1781.94&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.24&nbsp;&nbsp;&nbsp;&nbsp; 1147596&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.65<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Representative wait stats for a run of this test &#8211; two files:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15306.22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15296.67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 679281&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 63.87<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7762.25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7270.79&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 491.47&nbsp;&nbsp;&nbsp;&nbsp; 3215377&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32.39<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Representative wait stats for a run of this test &#8211; four files:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26833.45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26822.85&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 867558&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 75.88<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7097.77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6647.26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 450.51&nbsp;&nbsp;&nbsp;&nbsp; 3221475&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20.07<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Representative wait stats for a run of this test &#8211; eight files:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27556.79&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27547.83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.96&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 674319&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 75.09<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7545.40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7118.93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 426.47&nbsp;&nbsp;&nbsp;&nbsp; 3221841&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20.56<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Representative wait stats for a run of this test &#8211; sixteen files:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 37716.72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 37705.87&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.85&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 792189&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80.13<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7150.01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6699.36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 450.64&nbsp;&nbsp;&nbsp;&nbsp; 3228609&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15.19<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">These numbers are showing the majority of waits are for data pages to be read into the buffer pool &#8211; random reads, and the next most prevalent wait is for log block flushes to complete. The more <font face=\"courier new,courier\">PAGEIOLATCH_EX<\/font> waits there are, the worse the performance is.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\"><strong>Data on 640GB RAID-0 SSDs, log on SATA RAID-10<\/strong> <\/font><\/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\/8\/2-logsatadatassd.jpg\" alt=\"\" width=\"580\" height=\"364\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Don&#39;t let this graph fool you &#8211; the top and bottom of the scale are only 30 seconds apart. Basically moving the data files from the SCSI arrays to the RAID-0 SSD got around a 3-5x performance gain, no matter how the SSDs are formatted. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Representative wait stats for a run of this test &#8211; one file:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8459.65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7789.91&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 669.73&nbsp;&nbsp;&nbsp;&nbsp; 3207448&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 94.48<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 440.27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 392.51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 47.77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 828420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.92<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Representative wait stats for a run of this test &#8211; two, four, eight, or sixteen&nbsp;files:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7957.35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7356.01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 601.34&nbsp;&nbsp;&nbsp;&nbsp; 3206855&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 95.75<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\">The log is the obvious bottleneck in this configuration.<strong>&nbsp;<\/strong><\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\"><strong>Data and log on 640GB RAID-0 SSDs<\/strong> <\/font><\/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\/8\/3-logdata640ssd.jpg\" alt=\"\" width=\"580\" height=\"364\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">And again &#8211; high and low values are only 25 seconds apart. Moving log off to the same SSD gave a further 45%-ish improvement across the board, with little difference according to how the SSDs were formatted. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Representative wait stats for a run of this test &#8211;&nbsp;any number of&nbsp;files:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2955.69&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2184.99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 770.69&nbsp;&nbsp;&nbsp;&nbsp; 3203957&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 89.24<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 330.11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 288.89&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 41.23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 653147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.97<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">The percentages fluctuate up and down a few percent depending on write format and number of files, with the maximum write performance format tending to have a slightly higher percentage of <font face=\"courier new,courier\">WRITELOG<\/font> waits than the other two formats.<\/font>\n<\/p>\n<p>\n<font size=\"2\">Note that moving the log to the SSD as well as the data files drastically cuts down the number of <font face=\"courier new,courier\">WRITELOG<\/font> waits &#8211; what we&#39;d expect.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\"><strong>Data and log on single 320GB SSD<\/strong> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">&nbsp;<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/5-logdata320ssd.jpg\" alt=\"\" width=\"578\" height=\"364\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">The performance numbers for having everything on a single 320GB SSD are only a tiny amount slower than those for two 320GB SSDs &#8211; which is what I&#39;d expect. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Representative wait stats for a run of this test &#8211; one file with basic format or improved write performance format:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"verdana,geneva\" size=\"2\"><font face=\"courier new,courier\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2911.22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2121.05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 790.17&nbsp;&nbsp;&nbsp;&nbsp; 3204459&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 81.44<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 602.11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 546.56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 55.55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 758271&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16.84<\/font><br \/>\n\t<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">And for one file with maximum write performance format:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"verdana,geneva\" size=\"2\"><font face=\"courier new,courier\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3363.11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2523.63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 839.48&nbsp;&nbsp;&nbsp;&nbsp; 3204110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 87.54<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 428.68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 406.77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21.92&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 412081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.16<\/font><\/p>\n<p>\t<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">You can see that the higher amount of <font face=\"courier new,courier\">PAGEIOLATCH_EX<\/font> waits leads to lower overall performance. This makes sense to me.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\"><strong>Data and log on two 320GB RAID-1 SSDs<\/strong> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">&nbsp;<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/4-logdata320ssdr1.jpg\" alt=\"\" width=\"580\" height=\"364\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Now, I have an issue with people using SSDs in RAID-0 because it&#39;s a single point of failure. In an environment that&#39;s going all out on high-availability, if I was using SSDs for performance, depending on the criticality of the data I&#39;d want to at least double-up to RAID-1. For all the various configurations, moving from a single 320GB SSD to two of them in RAID-1 resulted in no more than a 10-15% drop in performance and it&#39;s still 3-5x faster than the SCSI setup. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Here&#39;s a representative set of wait stats for the entire set of tests:<\/font>\n<\/p>\n<blockquote>\n<p>\n\t<font face=\"courier new,courier\" size=\"2\">WaitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_S&nbsp;&nbsp;&nbsp;&nbsp; Signal_S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitCount&nbsp;&nbsp; Percentage<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;-<br \/>\n\tWRITELOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3949.44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3031.14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 918.30&nbsp;&nbsp;&nbsp;&nbsp; 3204694&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 85.68<br \/>\n\tPAGEIOLATCH_EX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 608.62&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 555.98&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 52.65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 692934&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13.20<\/font>\n\t<\/p>\n<\/blockquote>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">In general the RAID-1 configuration had more waits of both types than the single drive configuration.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\"><strong>Data and log on separate 320GB SSDs<\/strong> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">&nbsp;<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/6-logdatasep320ssds.jpg\" alt=\"\" width=\"580\" height=\"365\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Splitting the data and log make for a 5-20% improvement over having everything on a single 320GB SSD. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">The wait stats for these configurations show the same trends that we&#39;ve seen so far &#8211; slightly slower performance = slightly more <font face=\"courier new,courier\">PAGEIOLATCH_EX<\/font> waits.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\"><strong>Data and log round-robin between separate 320GB SSDs<\/strong> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">&nbsp;<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/7-logdatarr320ssds.jpg\" alt=\"\" width=\"580\" height=\"364\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">This confused me &#8211; the single file case is exactly the same configuration as the test case above, but the results (for each test being run 5 time and then averaged) were almost 10% faster for the first two formats. No significant differences for the other configurations. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">The wait stats for these configurations show the same trends that we&#39;ve seen so far &#8211; slightly slower performance = slightly more <font face=\"courier new,courier\">PAGEIOLATCH_EX<\/font> waits.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\"><strong>Best-case&nbsp;performance for each number of data files<\/strong> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">&nbsp;<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/best1.jpg\" alt=\"\" width=\"517\" height=\"366\" \/> <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/best2.jpg\" alt=\"\" width=\"517\" height=\"365\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">&nbsp;<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/best4.jpg\" alt=\"\" width=\"518\" height=\"365\" \/> <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/best8.jpg\" alt=\"\" width=\"517\" height=\"365\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">&nbsp;<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/best16.jpg\" alt=\"\" width=\"517\" height=\"365\" \/> <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Well big surprise &#8211; the SSDs outperform the SCSI storage for all these tests. The improvement factor varied by the number of data files: <\/font>\n<\/p>\n<ul>\n<li><font face=\"verdana,geneva\" size=\"2\">1: SSD was 7.25x faster than SCSI <\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">2: SSD was 4.74x faster than SCSI <\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">4: SSD was 6.81x faster than SCSI <\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">8: SSD was 7.64x faster than SCSI <\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">16: SSD was 9.03x faster than SCSI <\/font><\/li>\n<\/ul>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">The configuration of&nbsp;4 data files on one SSD and the log on the other SSD, with basic format for both,&nbsp;was the best overall performer, beating the best SCSI configuration (2 data files) by a factor of 4.96. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\"><font size=\"2\"><strong>Summary<\/strong> <\/font><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Reminder: this test was&nbsp;32 million&nbsp;inserts with no reads or updates (i.e. no random IO). It is very important to consider the limited scenario being tested and to draw appropriate conclusions. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">My conclusions are as follows:<\/font>\n<\/p>\n<ol>\n<li><font face=\"verdana,geneva\" size=\"2\">For a random read+write workload, the method of formatting the Fusion-io drives doesn&#39;t make much difference. I&#39;d go for the basic format to get the higher capacity, but I&#39;d always to a representative load test to make sure.<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">For a random read+write workload, the SSDs give at least a 5x performance gain over iSCSI storage<\/font><\/li>\n<li><font face=\"verdana,geneva\" size=\"2\">Once again, having multiple data files outperforms having a single data file in most configurations<\/font><\/li>\n<li><font size=\"2\">I can easily correlate IO-subsystem related wait stats to the varying performance of the various configurations<\/font><\/li>\n<\/ol>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Compared to the sequential insert workload that I benchmarked in the <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-2-sequential-inserts\/\"><font face=\"verdana,geneva\" size=\"2\">previous set of tests<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">, the random read+write workload makes it worth investigating the investment of moving to SSDs.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Just like last time, these results confirm what I&#39;d heard anecdotally &#8211; random operations are the sweet-spot for SSDs.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Brent&#39;s playing with the server over the next 4 weeks so I won&#39;t be doing any more benchmarking until mid-September at least.<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Hope these results are interesting to you!<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\"><\/font><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Last time I posted about SSDs I presented the findings from sequential inserts with a variety of configurations and basically concluded that&nbsp;SSDs do not provide a substantial gain over SCSI storage (that is not overloaded) &#8211; see this blog post for more details. You can see my benchmarking hardware setup here, with the addition of [&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,43,45,66,89],"tags":[],"class_list":["post-665","post","type-post","status-publish","format-standard","hentry","category-benchmarking","category-fusion-io","category-hardware","category-performance-tuning","category-ssds"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Benchmarking: Introducing SSDs (Part 3: random inserts with wait stats details) - 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-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Benchmarking: Introducing SSDs (Part 3: random inserts with wait stats details) - Paul S. Randal\" \/>\n<meta property=\"og:description\" content=\"Last time I posted about SSDs I presented the findings from sequential inserts with a variety of configurations and basically concluded that&nbsp;SSDs do not provide a substantial gain over SCSI storage (that is not overloaded) &#8211; see this blog post for more details. You can see my benchmarking hardware setup here, with the addition of [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/\" \/>\n<meta property=\"og:site_name\" content=\"Paul S. Randal\" \/>\n<meta property=\"article:published_time\" content=\"2010-08-10T17:31:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-01-02T07:56:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/1-logsatadatascsi.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=\"19 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-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/\",\"name\":\"Benchmarking: Introducing SSDs (Part 3: random inserts with wait stats details) - Paul S. Randal\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/1-logsatadatascsi.jpg\",\"datePublished\":\"2010-08-10T17:31:00+00:00\",\"dateModified\":\"2013-01-02T07:56:28+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#primaryimage\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/1-logsatadatascsi.jpg\",\"contentUrl\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/1-logsatadatascsi.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Benchmarking: Introducing SSDs (Part 3: random inserts with wait stats details)\"}]},{\"@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: Introducing SSDs (Part 3: random inserts with wait stats details) - 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-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/","og_locale":"en_US","og_type":"article","og_title":"Benchmarking: Introducing SSDs (Part 3: random inserts with wait stats details) - Paul S. Randal","og_description":"Last time I posted about SSDs I presented the findings from sequential inserts with a variety of configurations and basically concluded that&nbsp;SSDs do not provide a substantial gain over SCSI storage (that is not overloaded) &#8211; see this blog post for more details. You can see my benchmarking hardware setup here, with the addition of [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/","og_site_name":"Paul S. Randal","article_published_time":"2010-08-10T17:31:00+00:00","article_modified_time":"2013-01-02T07:56:28+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/1-logsatadatascsi.jpg","type":"","width":"","height":""}],"author":"Paul Randal","twitter_misc":{"Written by":"Paul Randal","Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/","name":"Benchmarking: Introducing SSDs (Part 3: random inserts with wait stats details) - Paul S. Randal","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/1-logsatadatascsi.jpg","datePublished":"2010-08-10T17:31:00+00:00","dateModified":"2013-01-02T07:56:28+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#primaryimage","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/1-logsatadatascsi.jpg","contentUrl":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-content\/uploads\/2010\/8\/1-logsatadatascsi.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-introducing-ssds-part-3-random-inserts-with-wait-stats-details\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/paul\/"},{"@type":"ListItem","position":2,"name":"Benchmarking: Introducing SSDs (Part 3: random inserts with wait stats details)"}]},{"@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\/665","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=665"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/665\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/media?parent=665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/categories?post=665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/tags?post=665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}