{"id":536,"date":"2010-12-28T20:25:00","date_gmt":"2010-12-28T20:25:00","guid":{"rendered":"\/blogs\/jonathan\/post\/An-XEvent-a-Day-(28-of-31)-e28093-Tracking-Page-Compression-Operations.aspx"},"modified":"2017-04-13T12:16:35","modified_gmt":"2017-04-13T16:16:35","slug":"an-xevent-a-day-28-of-31-tracking-page-compression-operations","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/","title":{"rendered":"An XEvent a Day (28 of 31) &#8211; Tracking Page Compression Operations"},"content":{"rendered":"<p>The Database Compression feature in SQL Server 2008 Enterprise Edition can provide some significant reductions in storage requirements for SQL Server databases, and in the right implementations and scenarios performance improvements as well.&#160; There isn\u2019t really a whole lot of information about the operations of database compression that is documented as being available in the DMV\u2019s or SQL Trace.&#160; Paul Randal pointed out on Twitter today that sys.dm_db_index_operational_stats() provides the page_compression_attempt_count and page_compression_success_count available.&#160; Beyond that the only other documented information for monitoring Data Compression are the Page Compression Attempts\/sec and Pages Compressed\/sec Performance Counters of the SQL Server:Access Methods object in Perfmon (<a title=\"http:\/\/msdn.microsoft.com\/en-us\/library\/cc280449.aspx\" href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/data-compression\/data-compression\">http:\/\/msdn.microsoft.com\/en-us\/library\/cc280449.aspx<\/a>).&#160; <\/p>\n<p>There is one thing in common about the documented methods of monitoring Data Compression, and that is they all only deal with Page compression, and not Row compression, and in Extended Events we find the same commonality as there are no Row compression Events in Extended Events.&#160; There are two Page compression Events in Extended Events; sqlserver.page_compression_attempt_failed and sqlserver.page_compression_tracing.&#160; These two Events can be used to track Page compression operations at multiple levels, including database, object, index, and even down to the individual page. The sqlserver.page_compression_tracing Event provides Start and End tracing of Page compression operations inside of the Database Engine and returns the database_id, index_id, rowset_id, page_id, and duration of the compression operation.&#160; The sqlserver.page_compression_attempt_failed is really poorly named, and doesn\u2019t provide information about failures in the sense that something broke, but provides information for why a page compression attempt did not actually change the compression of the data in the page.&#160; It also returns the database_id, index_id, rowset_id, and page_id for the compression attempt, and it also includes a failure_reason column which correlates to the page_compression_failure_reason Map Value.<\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: green\">-- Get the payload information for the Events \r\n<\/span><span style=\"color: blue\">SELECT \r\n    <\/span><span style=\"color: magenta\">object_name<\/span><span style=\"color: gray\">, \r\n    <\/span>column_id<span style=\"color: gray\">, \r\n    <\/span>name<span style=\"color: gray\">, \r\n    <\/span><span style=\"color: magenta\">type_name\r\n<\/span><span style=\"color: blue\">FROM <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_xe_object_columns\r\n<\/span><span style=\"color: blue\">WHERE <\/span><span style=\"color: magenta\">object_name <\/span><span style=\"color: gray\">IN (<\/span><span style=\"color: red\">'page_compression_tracing'<\/span><span style=\"color: gray\">, \r\n                      <\/span><span style=\"color: red\">'page_compression_attempt_failed'<\/span><span style=\"color: gray\">)\r\n  AND <\/span>column_type <span style=\"color: gray\">= <\/span><span style=\"color: red\">'data'<\/span><\/pre>\n<\/blockquote>\n<blockquote>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/148eb5b1\/image.png\" target=\"_blank\"><img fetchpriority=\"high\" decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/0fac01f5\/image_thumb.png\" width=\"540\" height=\"240\" \/><\/a> <\/p>\n<\/blockquote>\n<p>To demonstrate how these Events function, I am going to use the LineItem table from the TPC-H Benchmark that was created by Quest Benchmark Factory using Level 2 for the table sizing, which makes the table just at 1.8GB in size.&#160; All of the indexes on the table will be rebuilt using PAGE compression, and then 10,000 rows will be added to the table.&#160; To setup the environment, first load the TPC-H LineItem table with the appropriate seed of data, this can be done with the free trial version of Benchmark Factory.&#160; Then rebuild all of the indexes on the LineItem table using PAGE compression, and review the PAGE compression statistics from sys.dm_db_index_operational_stats for the database and object.<\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: blue\">USE <\/span>[TPCH]\r\n<span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Rebuild the indexes with Page compression \r\n<\/span><span style=\"color: blue\">ALTER INDEX <\/span><span style=\"color: gray\">ALL <\/span><span style=\"color: blue\">ON <\/span>dbo<span style=\"color: gray\">.<\/span>H_Lineitem <span style=\"color: blue\">REBUILD WITH <\/span><span style=\"color: gray\">(<\/span>DATA_COMPRESSION <span style=\"color: gray\">= <\/span>PAGE<span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Look at the compression information in sys.dm_db_index_operational_stats\r\n<\/span><span style=\"color: blue\">SELECT \r\n    <\/span>database_id<span style=\"color: gray\">, \r\n    <\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">, \r\n    <\/span>index_id<span style=\"color: gray\">, \r\n    <\/span>page_compression_attempt_count<span style=\"color: gray\">, \r\n    <\/span>page_compression_success_count<span style=\"color: gray\">,\r\n    (<\/span>page_compression_attempt_count <span style=\"color: gray\">- <\/span>page_compression_success_count<span style=\"color: gray\">) <\/span><span style=\"color: blue\">as <\/span>page_compression_failure_count\r\n<span style=\"color: blue\">FROM <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_db_index_operational_stats<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">db_id<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">'TPCH'<\/span><span style=\"color: gray\">), <\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">'H_Lineitem'<\/span><span style=\"color: gray\">), null, null)\r\n<\/span><span style=\"color: blue\">GO<\/span><\/pre>\n<\/blockquote>\n<blockquote>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/2eeea8c8\/image.png\" target=\"_blank\"><img decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/1dbacb25\/image_thumb.png\" width=\"644\" height=\"71\" \/><\/a> <\/p>\n<\/blockquote>\n<p>Once the table and its indexes have been rebuilt using PAGE compression, we can then create our Event Session, start it, and add 10,000 rows to the LineItem table.&#160; After we add the rows, we can then check the page compression statistics in sys.dm_db_index_operational_stats, and drop our Event Session from the server. <\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: green\">-- Create an Event Session to Track the Failed attempts\r\n<\/span><span style=\"color: blue\">CREATE EVENT SESSION <\/span>PageCompressionTracing\r\n<span style=\"color: blue\">ON SERVER\r\nADD EVENT <\/span>sqlserver<span style=\"color: gray\">.<\/span>page_compression_attempt_failed<span style=\"color: gray\">,\r\n<\/span><span style=\"color: blue\">ADD EVENT <\/span>sqlserver<span style=\"color: gray\">.<\/span>page_compression_tracing\r\n<span style=\"color: blue\">ADD TARGET <\/span>package0<span style=\"color: gray\">.<\/span>asynchronous_file_target<span style=\"color: gray\">(\r\n     <\/span><span style=\"color: blue\">SET filename<\/span><span style=\"color: gray\">=<\/span><span style=\"color: red\">'C:\\SQLBlog\\PageCompressionTracing.xel'<\/span><span style=\"color: gray\">,\r\n         <\/span>metadatafile<span style=\"color: gray\">=<\/span><span style=\"color: red\">'C:\\SQLBlog\\PageCompressionTracing.xem'<\/span><span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">WITH <\/span><span style=\"color: gray\">(<\/span>MAX_MEMORY <span style=\"color: gray\">= <\/span>8MB<span style=\"color: gray\">, <\/span>EVENT_RETENTION_MODE <span style=\"color: gray\">= <\/span>ALLOW_SINGLE_EVENT_LOSS<span style=\"color: gray\">, <\/span>MAX_DISPATCH_LATENCY<span style=\"color: gray\">=<\/span>5SECONDS<span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Start the Event Session\r\n<\/span><span style=\"color: blue\">ALTER EVENT SESSION <\/span>PageCompressionTracing\r\n<span style=\"color: blue\">ON SERVER\r\nSTATE<\/span><span style=\"color: gray\">=<\/span>START\r\n<span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Insert 10000 rows into the H_Lineitem table\r\n<\/span><span style=\"color: blue\">INSERT INTO <\/span>H_Lineitem\r\n    <span style=\"color: gray\">(<\/span>l_orderkey<span style=\"color: gray\">, <\/span>l_partkey<span style=\"color: gray\">, <\/span>l_suppkey<span style=\"color: gray\">, <\/span>l_linenumber<span style=\"color: gray\">, <\/span>l_quantity<span style=\"color: gray\">, \r\n     <\/span>l_extendedprice<span style=\"color: gray\">, <\/span>l_discount<span style=\"color: gray\">, <\/span>l_tax<span style=\"color: gray\">, <\/span>l_returnflag<span style=\"color: gray\">, <\/span>l_linestatus<span style=\"color: gray\">, \r\n     <\/span>l_shipdate<span style=\"color: gray\">, <\/span>l_commitdate<span style=\"color: gray\">, <\/span>l_receiptdate<span style=\"color: gray\">, <\/span>l_shipinstruct<span style=\"color: gray\">, <\/span>l_shipmode<span style=\"color: gray\">, \r\n     <\/span>l_comment<span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">SELECT TOP <\/span>10000 \r\n     l_orderkey<span style=\"color: gray\">, <\/span>l_partkey<span style=\"color: gray\">, <\/span>l_suppkey<span style=\"color: gray\">, <\/span>l_linenumber<span style=\"color: gray\">, <\/span>l_quantity<span style=\"color: gray\">, \r\n     <\/span>l_extendedprice<span style=\"color: gray\">, <\/span>l_discount<span style=\"color: gray\">, <\/span>l_tax<span style=\"color: gray\">, <\/span>l_returnflag<span style=\"color: gray\">, <\/span>l_linestatus<span style=\"color: gray\">, \r\n     <\/span>l_shipdate<span style=\"color: gray\">, <\/span>l_commitdate<span style=\"color: gray\">, <\/span>l_receiptdate<span style=\"color: gray\">, <\/span>l_shipinstruct<span style=\"color: gray\">, <\/span>l_shipmode<span style=\"color: gray\">, \r\n     <\/span>l_comment\r\n<span style=\"color: blue\">FROM <\/span>H_Lineitem\r\n<span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Look at the compression information in sys.dm_db_index_operational_stats\r\n<\/span><span style=\"color: blue\">SELECT \r\n    <\/span>database_id<span style=\"color: gray\">, \r\n    <\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">, \r\n    <\/span>index_id<span style=\"color: gray\">, \r\n    <\/span>page_compression_attempt_count<span style=\"color: gray\">, \r\n    <\/span>page_compression_success_count<span style=\"color: gray\">,\r\n    (<\/span>page_compression_attempt_count <span style=\"color: gray\">- <\/span>page_compression_success_count<span style=\"color: gray\">) <\/span><span style=\"color: blue\">as <\/span>page_compression_failure_count\r\n<span style=\"color: blue\">FROM <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_db_index_operational_stats<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">db_id<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">'TPCH'<\/span><span style=\"color: gray\">), <\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">'H_Lineitem'<\/span><span style=\"color: gray\">), null, null)\r\n<\/span><span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Drop the Event Session\r\n<\/span><span style=\"color: blue\">DROP EVENT SESSION <\/span>PageCompressionTracing\r\n<span style=\"color: blue\">ON SERVER\r\nGO<\/span><\/pre>\n<\/blockquote>\n<blockquote><\/blockquote>\n<blockquote>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/4acfb7f3\/image.png\" target=\"_blank\"><img decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/5c4018cb\/image_thumb.png\" width=\"644\" height=\"70\" \/><\/a> <\/p>\n<\/blockquote>\n<p>Now we can parse the Events that were captured by our Event Session and compare the information presented by sys.dm_db_index_operational_stats() with what was collected by Extended Events.<\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: green\">-- Create our result Analysis database\r\n<\/span><span style=\"color: blue\">CREATE DATABASE <\/span>[PageCompTestResults]\r\n<span style=\"color: blue\">GO\r\nUSE <\/span>[PageCompTestResults]\r\n<span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Create intermediate temp table for raw event data\r\n<\/span><span style=\"color: blue\">CREATE TABLE <\/span>RawEventData\r\n<span style=\"color: gray\">(<\/span>Rowid <span style=\"color: blue\">int identity primary key<\/span><span style=\"color: gray\">, <\/span>event_data <span style=\"color: blue\">xml<\/span><span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Read the file data into intermediate temp table\r\n<\/span><span style=\"color: blue\">INSERT INTO <\/span>RawEventData <span style=\"color: gray\">(<\/span>event_data<span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">SELECT\r\n    <\/span><span style=\"color: magenta\">CAST<\/span><span style=\"color: gray\">(<\/span>event_data <span style=\"color: blue\">AS XML<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>event_data\r\n<span style=\"color: blue\">FROM <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span>fn_xe_file_target_read_file<span style=\"color: gray\">(<\/span><span style=\"color: red\">'C:\\SQLBlog\\PageCompressionTracing*.xel'<\/span><span style=\"color: gray\">, \r\n                                     <\/span><span style=\"color: red\">'C:\\SQLBlog\\PageCompressionTracing*.xem'<\/span><span style=\"color: gray\">, \r\n                                     null, null)\r\n<\/span><span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Fetch the Event Data from the Event Session Target\r\n<\/span><span style=\"color: blue\">SELECT \r\n    <\/span>RowID<span style=\"color: gray\">,\r\n    <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/@name)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'varchar(50)'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>event_name<span style=\"color: gray\">,\r\n    <\/span><span style=\"color: magenta\">DATEADD<\/span><span style=\"color: gray\">(<\/span>hh<span style=\"color: gray\">, \r\n            <\/span><span style=\"color: magenta\">DATEDIFF<\/span><span style=\"color: gray\">(<\/span>hh<span style=\"color: gray\">, <\/span><span style=\"color: magenta\">GETUTCDATE<\/span><span style=\"color: gray\">(), <\/span><span style=\"color: magenta\">CURRENT_TIMESTAMP<\/span><span style=\"color: gray\">), \r\n            <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/@timestamp)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'datetime2'<\/span><span style=\"color: gray\">)) <\/span><span style=\"color: blue\">AS <\/span>[timestamp]<span style=\"color: gray\">,\r\n    <\/span><span style=\"color: magenta\">COALESCE<\/span><span style=\"color: gray\">(<\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;database_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">), \r\n             <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;database_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">)) <\/span><span style=\"color: blue\">AS <\/span>database_id<span style=\"color: gray\">,\r\n    <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;file_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[file_id]<span style=\"color: gray\">,\r\n    <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;page_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[page_id]<span style=\"color: gray\">,\r\n    <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;rowset_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'bigint'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[rowset_id]<span style=\"color: gray\">,\r\n    <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;failure_reason&quot;]\/text)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'nvarchar(150)'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[failure_reason]<span style=\"color: gray\">,\r\n    <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;system_thread_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[system_thread_id]<span style=\"color: gray\">,\r\n    <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;scheduler_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[scheduler_id]<span style=\"color: gray\">,\r\n    <\/span>event_data<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;cpu_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[cpu_id]\r\n<span style=\"color: blue\">INTO <\/span>ParsedResults\r\n<span style=\"color: blue\">FROM <\/span>RawEventData\r\n<span style=\"color: blue\">GO<\/span><\/pre>\n<\/blockquote>\n<p>After parsing out the data, we can begin to really leverage the information we\u2019ve gathered.&#160; If we join the ParsedResults table to sys.partitions for our TPCH database by rowset_id = hobt_id, we can get the object_id and index_id and aggregate the failure reasons up to the object and index level.<\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: blue\">SELECT \r\n    <\/span>pr<span style=\"color: gray\">.<\/span>database_id<span style=\"color: gray\">, \r\n    <\/span>p<span style=\"color: gray\">.<\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">, \r\n    <\/span>p<span style=\"color: gray\">.<\/span>index_id<span style=\"color: gray\">,\r\n    <\/span>failure_reason<span style=\"color: gray\">, \r\n    <\/span><span style=\"color: magenta\">COUNT<\/span><span style=\"color: gray\">(*) <\/span><span style=\"color: blue\">as <\/span>failure_count\r\n<span style=\"color: blue\">FROM <\/span>TPCH<span style=\"color: gray\">.<\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">partitions <\/span>p\r\n<span style=\"color: gray\">JOIN <\/span>ParsedResults pr\r\n    <span style=\"color: blue\">ON <\/span>pr<span style=\"color: gray\">.<\/span>rowset_id <span style=\"color: gray\">= <\/span>p<span style=\"color: gray\">.<\/span>hobt_id\r\n<span style=\"color: blue\">WHERE <\/span>event_name <span style=\"color: gray\">= <\/span><span style=\"color: red\">'page_compression_attempt_failed'\r\n<\/span><span style=\"color: blue\">GROUP BY     <\/span>pr<span style=\"color: gray\">.<\/span>database_id<span style=\"color: gray\">, \r\n    <\/span>p<span style=\"color: gray\">.<\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">, \r\n    <\/span>p<span style=\"color: gray\">.<\/span>index_id<span style=\"color: gray\">,\r\n    <\/span>failure_reason\r\n<span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Look at the compression information in sys.dm_db_index_operational_stats\r\n<\/span><span style=\"color: blue\">SELECT \r\n    <\/span>database_id<span style=\"color: gray\">, \r\n    <\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">, \r\n    <\/span>index_id<span style=\"color: gray\">, \r\n    <\/span>page_compression_attempt_count<span style=\"color: gray\">, \r\n    <\/span>page_compression_success_count<span style=\"color: gray\">,\r\n    (<\/span>page_compression_attempt_count <span style=\"color: gray\">- <\/span>page_compression_success_count<span style=\"color: gray\">) <\/span><span style=\"color: blue\">as <\/span>page_compression_failure_count\r\n<span style=\"color: blue\">FROM <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_db_index_operational_stats<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">db_id<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">'TPCH'<\/span><span style=\"color: gray\">), <\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">'H_Lineitem'<\/span><span style=\"color: gray\">), null, null)\r\n<\/span><span style=\"color: blue\">GO<\/span><\/pre>\n<\/blockquote>\n<blockquote>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/74638326\/image.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/13a629fa\/image_thumb.png\" width=\"644\" height=\"214\" \/><\/a> <\/p>\n<\/blockquote>\n<p>With this we can se that the Extended Events sqlserver.page_compression_attempt_failed Event tracks failures and attempts that are not counted in sys.dm_db_index_operational_stats().&#160; The PageModCountBelowThreshold failure isn\u2019t really a failed attempt at compression.&#160; This reason shows that the page was evaluated for recalculation, and the modified counter for the page hadn\u2019t passed the internal threshold for recalculation so the actual compression operation wasn\u2019t performed.&#160; If we look at the sqlserver.page_compression_tracing Event information, we can see how the numbers begin to come together to match what is output by sys.dm_db_index_operational_stats().<\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: blue\">SELECT \r\n    <\/span>pr<span style=\"color: gray\">.<\/span>database_id<span style=\"color: gray\">, \r\n    <\/span>p<span style=\"color: gray\">.<\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">, \r\n    <\/span>p<span style=\"color: gray\">.<\/span>index_id<span style=\"color: gray\">,\r\n    <\/span><span style=\"color: magenta\">COUNT<\/span><span style=\"color: gray\">(*) <\/span><span style=\"color: blue\">as <\/span>attempt_count\r\n<span style=\"color: blue\">FROM <\/span>TPCH<span style=\"color: gray\">.<\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">partitions <\/span>p\r\n<span style=\"color: gray\">JOIN <\/span>ParsedResults pr\r\n    <span style=\"color: blue\">ON <\/span>pr<span style=\"color: gray\">.<\/span>rowset_id <span style=\"color: gray\">= <\/span>p<span style=\"color: gray\">.<\/span>hobt_id\r\n<span style=\"color: blue\">WHERE <\/span>event_name <span style=\"color: gray\">= <\/span><span style=\"color: red\">'page_compression_tracing'\r\n  <\/span><span style=\"color: gray\">AND <\/span>opcode <span style=\"color: gray\">= <\/span><span style=\"color: red\">'Begin'\r\n<\/span><span style=\"color: blue\">GROUP BY     <\/span>pr<span style=\"color: gray\">.<\/span>database_id<span style=\"color: gray\">, \r\n    <\/span>p<span style=\"color: gray\">.<\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">, \r\n    <\/span>p<span style=\"color: gray\">.<\/span>index_id\r\n<span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Look at the compression information in sys.dm_db_index_operational_stats\r\n<\/span><span style=\"color: blue\">SELECT \r\n    <\/span>database_id<span style=\"color: gray\">, \r\n    <\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">, \r\n    <\/span>index_id<span style=\"color: gray\">, \r\n    <\/span>page_compression_attempt_count<span style=\"color: gray\">, \r\n    <\/span>page_compression_success_count<span style=\"color: gray\">,\r\n    (<\/span>page_compression_attempt_count <span style=\"color: gray\">- <\/span>page_compression_success_count<span style=\"color: gray\">) <\/span><span style=\"color: blue\">as <\/span>page_compression_failure_count\r\n<span style=\"color: blue\">FROM <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_db_index_operational_stats<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">db_id<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">'TPCH'<\/span><span style=\"color: gray\">), <\/span><span style=\"color: magenta\">object_id<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">'H_Lineitem'<\/span><span style=\"color: gray\">), null, null)\r\n<\/span><span style=\"color: blue\">GO<\/span><\/pre>\n<\/blockquote>\n<blockquote>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/1980cd93\/image.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/38c37466\/image_thumb.png\" width=\"644\" height=\"152\" \/><\/a> <\/p>\n<\/blockquote>\n<p>We have 193 attempts by this Event, and we have 72 PageModCountBelowThreshold failures, matching our actual attempts of 121 from the DMF.&#160; We can then subtract out the other failures and get the 93 successful operations matching the DMF as well.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Database Compression feature in SQL Server 2008 Enterprise Edition can provide some significant reductions in storage requirements for SQL Server databases, and in the right implementations and scenarios performance improvements as well.&#160; There isn\u2019t really a whole lot of information about the operations of database compression that is documented as being available in the [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,23,38,40,45],"tags":[],"class_list":["post-536","post","type-post","status-publish","format-standard","hentry","category-database-administration","category-extended-events","category-sql-server-2008","category-sql-server-denali","category-xevent-a-day-series"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>An XEvent a Day (28 of 31) - Tracking Page Compression Operations - Jonathan Kehayias<\/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\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An XEvent a Day (28 of 31) - Tracking Page Compression Operations - Jonathan Kehayias\" \/>\n<meta property=\"og:description\" content=\"The Database Compression feature in SQL Server 2008 Enterprise Edition can provide some significant reductions in storage requirements for SQL Server databases, and in the right implementations and scenarios performance improvements as well.&#160; There isn\u2019t really a whole lot of information about the operations of database compression that is documented as being available in the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/\" \/>\n<meta property=\"og:site_name\" content=\"Jonathan Kehayias\" \/>\n<meta property=\"article:published_time\" content=\"2010-12-28T20:25:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T16:16:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/0fac01f5\/image_thumb.png\" \/>\n<meta name=\"author\" content=\"Jonathan Kehayias\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Kehayias\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/\"},\"author\":{\"name\":\"Jonathan Kehayias\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"headline\":\"An XEvent a Day (28 of 31) &#8211; Tracking Page Compression Operations\",\"datePublished\":\"2010-12-28T20:25:00+00:00\",\"dateModified\":\"2017-04-13T16:16:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/\"},\"wordCount\":751,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/anxeventaday28of31trackingfailedpagecomp\\\/0fac01f5\\\/image_thumb.png\",\"articleSection\":[\"Database Administration\",\"Extended Events\",\"SQL Server 2008\",\"SQL Server Denali\",\"XEvent a Day Series\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/\",\"name\":\"An XEvent a Day (28 of 31) - Tracking Page Compression Operations - Jonathan Kehayias\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/anxeventaday28of31trackingfailedpagecomp\\\/0fac01f5\\\/image_thumb.png\",\"datePublished\":\"2010-12-28T20:25:00+00:00\",\"dateModified\":\"2017-04-13T16:16:35+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/anxeventaday28of31trackingfailedpagecomp\\\/0fac01f5\\\/image_thumb.png\",\"contentUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/anxeventaday28of31trackingfailedpagecomp\\\/0fac01f5\\\/image_thumb.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Database Administration\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/category\\\/database-administration\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"An XEvent a Day (28 of 31) &#8211; Tracking Page Compression Operations\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\",\"name\":\"Jonathan Kehayias - The Rambling DBA\",\"description\":\"The Rambling DBA\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/?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\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\",\"name\":\"Jonathan Kehayias\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"caption\":\"Jonathan Kehayias\"},\"sameAs\":[\"http:\\\/\\\/3.209.169.194\\\/blogs\\\/jonathan\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"An XEvent a Day (28 of 31) - Tracking Page Compression Operations - Jonathan Kehayias","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\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/","og_locale":"en_US","og_type":"article","og_title":"An XEvent a Day (28 of 31) - Tracking Page Compression Operations - Jonathan Kehayias","og_description":"The Database Compression feature in SQL Server 2008 Enterprise Edition can provide some significant reductions in storage requirements for SQL Server databases, and in the right implementations and scenarios performance improvements as well.&#160; There isn\u2019t really a whole lot of information about the operations of database compression that is documented as being available in the [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/","og_site_name":"Jonathan Kehayias","article_published_time":"2010-12-28T20:25:00+00:00","article_modified_time":"2017-04-13T16:16:35+00:00","og_image":[{"url":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/0fac01f5\/image_thumb.png","type":"","width":"","height":""}],"author":"Jonathan Kehayias","twitter_misc":{"Written by":"Jonathan Kehayias","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/#article","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/"},"author":{"name":"Jonathan Kehayias","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"headline":"An XEvent a Day (28 of 31) &#8211; Tracking Page Compression Operations","datePublished":"2010-12-28T20:25:00+00:00","dateModified":"2017-04-13T16:16:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/"},"wordCount":751,"commentCount":1,"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/#primaryimage"},"thumbnailUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/0fac01f5\/image_thumb.png","articleSection":["Database Administration","Extended Events","SQL Server 2008","SQL Server Denali","XEvent a Day Series"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/","name":"An XEvent a Day (28 of 31) - Tracking Page Compression Operations - Jonathan Kehayias","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/#primaryimage"},"thumbnailUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/0fac01f5\/image_thumb.png","datePublished":"2010-12-28T20:25:00+00:00","dateModified":"2017-04-13T16:16:35+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/#primaryimage","url":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/0fac01f5\/image_thumb.png","contentUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/anxeventaday28of31trackingfailedpagecomp\/0fac01f5\/image_thumb.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-28-of-31-tracking-page-compression-operations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/"},{"@type":"ListItem","position":2,"name":"Database Administration","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/category\/database-administration\/"},{"@type":"ListItem","position":3,"name":"An XEvent a Day (28 of 31) &#8211; Tracking Page Compression Operations"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/","name":"Jonathan Kehayias - The Rambling DBA","description":"The Rambling DBA","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/?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\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c","name":"Jonathan Kehayias","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","caption":"Jonathan Kehayias"},"sameAs":["http:\/\/3.209.169.194\/blogs\/jonathan"]}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/536","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/comments?post=536"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/536\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/media?parent=536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/categories?post=536"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/tags?post=536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}