{"id":762,"date":"2009-12-09T16:14:00","date_gmt":"2009-12-09T16:14:00","guid":{"rendered":"\/blogs\/paul\/post\/What-can-cause-log-reads-and-other-transaction-log-questions.aspx"},"modified":"2017-04-13T11:41:13","modified_gmt":"2017-04-13T18:41:13","slug":"what-can-cause-log-reads-and-other-transaction-log-questions","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/","title":{"rendered":"What can cause log reads and other transaction log questions"},"content":{"rendered":"<p>\n<font face=\"verdana,geneva\" size=\"2\">Earlier today there was a question on SQL Server Central where someone wanted to know what could be causing so many reads on their transaction log. I was asked to chime in by fellow MVP <\/font><a href=\"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/\"><font face=\"verdana,geneva\" size=\"2\">Jonathan Kehayias<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">&nbsp;(who also sent me some questions that I&#39;ve answered in this post &#8211; thanks Jon!), so I did, with a list of everything I could think of. I thought it would make for a good post, so here it is, with a few more things I remembered while writing the post. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Before I start, if you&#39;re not comfortable talking log records and transaction log architecture, see my TechNet Magazine article on <\/font><a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/2009.02.logging.aspx\"><font face=\"verdana,geneva\" size=\"2\">Understanding Logging and Recovery<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">, which explains everything clearly, including how having too many VLFs can affect operations on the log that have to scan VLFs. <\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Each of these things can cause reads of the log: <\/font>\n<\/p>\n<ul>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Transaction rollback<\/strong>: when a transaction has to roll back (either because you say ROLLBACK TRAN or something goes wrong and SQL Server aborts the transaction), the log records describing what happened in the transaction have to be read so that their effects can be removed from the database. This is explained in the TechNet Magazine article. Note that it doesn&#39;t matter if you&#39;re using explicit transactions or not (i.e. BEGIN TRAN), SQL Server always starts a transaction for you (called an implicit transaction) so that it can put a boundary on what needs to be rolled back in case of a failure. <\/font><\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Crash recovery<\/strong>: crash recovery must read the transaction log to figure out what to do with all the log records in the active portion of the log (all the way back to the earlier of the most recent checkpoint or the start of the oldest active transaction). The log is read twice &#8211; once going forward from that oldest point (called the REDO phase) and then going backwards (called the UNDO phase). Again, this is explained in great depth in the article. <\/font><\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Creating a database snapshot<\/strong>: a database snapshot is a point-in-time view of a database. What&#39;s more, it&#39;s a <em>transactionally consistent<\/em> point-in-time view of a database &#8211; which means that, essentially, crash recovery must be run on the real database to create the transactionally consistent view. The crash recovery is run <em>into <\/em>the database snapshot, the real database isn&#39;t affected &#8211; apart from having all the active transaction log read so that crash recovery can run. <\/font><\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Running DBCC CHECKDB<\/strong>: creates a database snapshot by default on 2005 onwards, and runs the consistency checks on the snapshot. See above. There&#39;s a much more detailed description, including how this worked in 2000, in the first part of the 10-page blog post <\/font><\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/checkdb-from-every-angle-complete-description-of-all-checkdb-stages\/\"><font face=\"verdana,geneva\" size=\"2\">CHECKDB From Every Angle: Complete description of all CHECKDB stages<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">. <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Transaction log backups<\/strong>: this one&#39;s kind of obvious. A transaction log backup contains all the transaction log records generated since the last log backup finished (or since the log backup chain was established). To back up the log it has to read it. What&#39;s not so obvious is that a log backup will also scan through all the VLFs in the log to see if any active ones can be made inactive (called <em>clearing<\/em> or <em>truncating<\/em> the log &#8211; both misnomers as nothing is cleared and nothing is truncated). See my TechNet Magazine article on <\/font><\/font><a href=\"https:\/\/technet.microsoft.com\/en-us\/magazine\/2009.07.sqlbackup.aspx\"><font face=\"verdana,geneva\" size=\"2\">Understanding SQL Server Backups<\/font><\/a><font face=\"verdana,geneva\" size=\"2\"> and in the blog post <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/importance-of-proper-transaction-log-size-management\/\"><font face=\"verdana,geneva\" size=\"2\">Importance of proper transaction log size management<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">.<\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Any kind of data backup<\/strong>: (full\/differential backup of a file\/filegroup\/database). Yup &#8211; data backups always include transaction log &#8211; so the backup can be restored and give you a transactionally consistent view of the database. See <\/font><\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/debunking-a-couple-of-myths-around-full-database-backups\/\"><font face=\"verdana,geneva\" size=\"2\">Debunking a couple of myths around full database backups<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">&nbsp;and <\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/more-on-how-much-transaction-log-a-full-backup-includes\/\"><font face=\"verdana,geneva\" size=\"2\">More on how much transaction log a full backup includes<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">&nbsp;for details if you don&#39;t believe me. <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Transactional replication<\/strong>: transactional replication works by harvesting committed transactions from the transaction log of the publication database (and then sending them to the subscriber(s) via the distribution database &#8211; beyond the scope of this post). This is done by the Log Reader Agent job, running from the Distributor. It needs to read all the log records generated in the publication database, even if they&#39;re nothing to do with the publications. More log equals more reads. My <\/font><\/font><a href=\"http:\/\/download.microsoft.com\/download\/d\/9\/4\/d948f981-926e-40fa-a026-5bfcf076d9b9\/ReplicationAndDBM.docx\"><font face=\"verdana,geneva\" size=\"2\">whitepaper<\/font><\/a><font face=\"verdana,geneva\" size=\"2\"> on combining database mirroring and transactional replication in 2008 has more details on this stuff, as does <\/font><a href=\"https:\/\/msdn.microsoft.com\/Areas\/Epx\/Content\/500.htm?aspxerrorpath=\/en-us\/library\/ms151706.aspx\"><font face=\"verdana,geneva\" size=\"2\">Books Online<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">. <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Change data capture (in 2008)<\/strong>: CDC uses the transactional replication log reader agent to harvest changes from the transaction log. See above. This means the CDC can cause the log to not be able to clear properly, just like transactional replication or database mirroring &#8211; see my blog post <\/font><\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-1-running-out-of-transaction-log-space\/\"><font face=\"verdana,geneva\" size=\"2\">Search Engine Q&amp;A #1: Running out of transaction log space<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">&nbsp;for more details. Note the I didn&#39;t say Change Tracking &#8211; it uses a totally different mechanism &#8211; see my TechNet Magazine article on <\/font><a href=\"https:\/\/technet.microsoft.com\/en-us\/magazine\/2008.11.sql.aspx\"><font face=\"verdana,geneva\" size=\"2\">Tracking Changes in Your Enterprise Database<\/font><\/a><font face=\"verdana,geneva\" size=\"2\"> for more details.<\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Database mirroring<\/strong>: DBM works by sending physical log records from the principal to the mirror database. If the mirroring sessions drops out of the SYNCHRONIZED state, then the log records won&#39;t be able to be read from memory and the mirroring subsystem will have to get them from disk &#8211; causing log reads. This can happen if you&#39;re running asynchronous mirroring (where you&#39;re specifically allowing for this), or if something went wrong while running synchronous mirroring (e.g. the network link between the principal and mirror dropped out, and a witness wasn&#39;t&nbsp;configured or the principal could still see the witness &#8211; again, beyond the scope of this post). Regardless, this is called having a SEND queue on the principal. <\/font><\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Restoring a backup<\/strong>: whenever backups are restored, even is you&#39;ve said WITH NORECOVERY, the REDO portion of recovery is run for each restore, which reads the log. <\/font><\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Restoring a log backup using WITH STANDBY<\/strong>: in this case, you&#39;ve essentially said you&#39;d like recovery to run, but not to affect the transaction log itself. Running recovery has to read the log. For more info on using WITH RECOVERY, NORECOVERY, or STANDBY, see my latest TechNet Magazine article on <\/font><\/font><a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/ee677581.aspx\"><font face=\"verdana,geneva\" size=\"2\">Recovering from Disasters Using Backups<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">, which explains how restores work. <\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>A checkpoint, in the SIMPLE recovery mode only<\/strong>: see my blog post <\/font><\/font><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/how-do-checkpoints-work-and-what-gets-logged\/\"><font face=\"verdana,geneva\" size=\"2\">How do checkpoints work and what gets logged<\/font><\/a><font face=\"verdana,geneva\" size=\"2\">&nbsp;for a description of what checkpoints are and what they do. In the SIMPLE recovery mode, checkpoints are responsible for clearing the log (described with links above) so must read through all the VLFs to see which can be marked inactive.<\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>When&nbsp;processing a DML trigger (on 2000)<\/strong>: (thanks to Clay Lenhart for the comment that reminded me of this). In SQL Server 2000, the before and after tables that you can process in a DML trigger body are actually found from looking at the log records generated by the operation that caused the trigger to fire. My dev team changed this in 2005 to store the before and after tables using the version store,&nbsp;giving a big perf boost to DML trigger processing.<strong>&nbsp;<\/strong><\/font><\/font>\n\t<\/div>\n<\/li>\n<li>\n<div>\n\t<font face=\"verdana,geneva\"><font size=\"2\"><strong>Manually looking in the log<\/strong> (with DBCC LOG or the table-valued function fn_dblog): this one&#39;s pretty obvious.<\/font><\/font>\n\t<\/div>\n<\/li>\n<\/ul>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">Phew &#8211; a lot of things can cause log reads, the trick is knowing which one it is!<\/font>\n<\/p>\n<p>\n<font face=\"verdana,geneva\" size=\"2\">As you can see, there could be a lot of activity reading from your log as well as writing to it, which could cause an IO bottleneck. Make sure that the IO subsystem on which you place the log file (note: you don&#39;t get ANY performance benefit from having multiple log files) can handle the read and write workload the log demands. RAID 1 or RAID 10 with a bunch of spindles to spread the IOs out (note\/warning\/achtung: that&#39;s a big generalization &#8211; don&#39;t reply with a comment saying it&#39;s wrong because you&#39;ve seen something different &#8211; different scenarios have different demands), and a proper RAID configuration (64k multiple for a stripe size, NTFS allocation unit size, volume partition alignment).<\/font><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Earlier today there was a question on SQL Server Central where someone wanted to know what could be causing so many reads on their transaction log. I was asked to chime in by fellow MVP Jonathan Kehayias&nbsp;(who also sent me some questions that I&#39;ve answered in this post &#8211; thanks Jon!), so I did, with [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,21,23,32,75,98],"tags":[],"class_list":["post-762","post","type-post","status-publish","format-standard","hentry","category-backuprestore","category-change-data-capture","category-checkpoint","category-database-mirroring","category-replication","category-transaction-log"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What can cause log reads and other transaction log questions - 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\/what-can-cause-log-reads-and-other-transaction-log-questions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What can cause log reads and other transaction log questions - Paul S. Randal\" \/>\n<meta property=\"og:description\" content=\"Earlier today there was a question on SQL Server Central where someone wanted to know what could be causing so many reads on their transaction log. I was asked to chime in by fellow MVP Jonathan Kehayias&nbsp;(who also sent me some questions that I&#039;ve answered in this post &#8211; thanks Jon!), so I did, with [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/\" \/>\n<meta property=\"og:site_name\" content=\"Paul S. Randal\" \/>\n<meta property=\"article:published_time\" content=\"2009-12-09T16:14:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T18:41:13+00:00\" \/>\n<meta name=\"author\" content=\"Paul Randal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Randal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/\",\"name\":\"What can cause log reads and other transaction log questions - Paul S. Randal\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\"},\"datePublished\":\"2009-12-09T16:14:00+00:00\",\"dateModified\":\"2017-04-13T18:41:13+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What can cause log reads and other transaction log questions\"}]},{\"@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":"What can cause log reads and other transaction log questions - 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\/what-can-cause-log-reads-and-other-transaction-log-questions\/","og_locale":"en_US","og_type":"article","og_title":"What can cause log reads and other transaction log questions - Paul S. Randal","og_description":"Earlier today there was a question on SQL Server Central where someone wanted to know what could be causing so many reads on their transaction log. I was asked to chime in by fellow MVP Jonathan Kehayias&nbsp;(who also sent me some questions that I&#39;ve answered in this post &#8211; thanks Jon!), so I did, with [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/","og_site_name":"Paul S. Randal","article_published_time":"2009-12-09T16:14:00+00:00","article_modified_time":"2017-04-13T18:41:13+00:00","author":"Paul Randal","twitter_misc":{"Written by":"Paul Randal","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/","name":"What can cause log reads and other transaction log questions - Paul S. Randal","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website"},"datePublished":"2009-12-09T16:14:00+00:00","dateModified":"2017-04-13T18:41:13+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/what-can-cause-log-reads-and-other-transaction-log-questions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/paul\/"},{"@type":"ListItem","position":2,"name":"What can cause log reads and other transaction log questions"}]},{"@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\/762","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=762"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/762\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/media?parent=762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/categories?post=762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/tags?post=762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}