{"id":712,"date":"2013-04-12T12:30:24","date_gmt":"2013-04-12T19:30:24","guid":{"rendered":"http:\/\/3.209.169.194\/blogs\/glenn\/?p=712"},"modified":"2013-04-16T12:37:09","modified_gmt":"2013-04-16T19:37:09","slug":"estimating-data-compression-savings-in-sql-server-2012","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/","title":{"rendered":"Estimating Data Compression Savings in SQL Server 2012"},"content":{"rendered":"<p>SQL Server Data Compression (which was first introduced in SQL Server 2008, and is an Enterprise Edition only feature) lets you compress individual indexes with either ROW or PAGE compression. It can be a huge win for many SQL Server workloads, by letting you reduce both your required disk I\/O and your memory usage at the cost of some added CPU usage in some scenarios.<\/p>\n<p>By design, there is no \u201cCompress Entire Database\u201d command in SQL Server 2012. Instead, you need to evaluate individual indexes, based on their size, estimated compression savings and volatility. The ideal case is a large table that shows very good compression savings that is read-only. A bad candidate is a small table, that does not show much compression savings, with very volatile data.<\/p>\n<p>I long ago got tired of manually running the sp_estimate_data_compression_savings system stored procedure with hard-coded parameters for each index in a database, so I decided to write some T-SQL that would somewhat automate the process.\u00a0 If you set the schema name, table name, and desired data compression type in the variable declarations at the top of the script, you will get some pretty detailed information about all of the indexes in that table.<\/p>\n<p>You should run the entire query at once, after you have supplied your own values. It may take some time to run, depending on your hardware and on how large your tables are.\u00a0 You could also wrap part of this in a stored procedure that you could call for each table in a database, and have it write the results out to a table that you could easily query later.<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><\/pre>\n<pre class=\"alt\">    <span class=\"rem\">-- SQL Server 2008, 2008 R2 and 2012 Data Compression Estimation Queries<\/span>\r\n    <span class=\"rem\">-- This may take some time to run, depending on your hardware infrastructure and table size<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"rem\">-- Glenn Berry <\/span>\r\n    <span class=\"rem\">-- April 2013<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"rem\">-- https:\/\/www.sqlskills.com\/blogs\/glenn\/<\/span>\r\n    <span class=\"rem\">-- http:\/\/glennberrysqlperformance.spaces.live.com\/<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"rem\">-- Twitter: GlennAlanBerry<\/span><\/pre>\n<pre class=\"alt\">\u00a0\r\n    <span class=\"rem\">-- Get estimated data compression savings and other index info for every index in the specified table<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">SET<\/span> NOCOUNT <span class=\"kwrd\">ON<\/span>;<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">DECLARE<\/span> @SchemaName sysname = N<span class=\"str\">'dbo'<\/span>;                                <span class=\"rem\">-- Specify schema name<\/span>\r\n    <span class=\"kwrd\">DECLARE<\/span> @TableName sysname = N<span class=\"str\">'ActivityEvent'<\/span>;                        <span class=\"rem\">-- Specify table name<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">DECLARE<\/span> @FullName sysname = @SchemaName + <span class=\"str\">'.'<\/span> + @TableName;\r\n    <span class=\"kwrd\">DECLARE<\/span> @IndexID <span class=\"kwrd\">int<\/span> = 1;<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">DECLARE<\/span> @CompressionType nvarchar(60) = N<span class=\"str\">'PAGE'<\/span>;                    <span class=\"rem\">-- Specify desired data compression type (PAGE, ROW, or NONE)<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">SET<\/span> @FullName = @SchemaName + <span class=\"str\">'.'<\/span> + @TableName;<\/pre>\n<pre class=\"alt\">\u00a0\r\n    <span class=\"rem\">-- Get Table name, row count, and compression status for clustered index or heap table<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">SELECT<\/span> OBJECT_NAME(object_id) <span class=\"kwrd\">AS<\/span> [<span class=\"kwrd\">Object<\/span> Name], \r\n    <span class=\"kwrd\">SUM<\/span>(<span class=\"kwrd\">Rows<\/span>) <span class=\"kwrd\">AS<\/span> [<span class=\"kwrd\">RowCount<\/span>], data_compression_desc <span class=\"kwrd\">AS<\/span> [Compression Type]<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">FROM<\/span> sys.partitions <span class=\"kwrd\">WITH<\/span> (NOLOCK)\r\n    <span class=\"kwrd\">WHERE<\/span> index_id &lt; 2<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">AND<\/span> OBJECT_NAME(object_id) = @TableName\r\n    <span class=\"kwrd\">GROUP<\/span> <span class=\"kwrd\">BY<\/span> object_id, data_compression_desc<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">ORDER<\/span> <span class=\"kwrd\">BY<\/span> <span class=\"kwrd\">SUM<\/span>(<span class=\"kwrd\">Rows<\/span>) <span class=\"kwrd\">DESC<\/span>;<\/pre>\n<pre class=\"alt\">\u00a0\r\n    <span class=\"rem\">-- Breaks down buffers used by current table in this database by object (table, index) in the buffer pool<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"rem\">-- Shows you which indexes are taking the most space in the buffer cache, so they might be possible candidates for data compression<\/span>\r\n    <span class=\"kwrd\">SELECT<\/span> OBJECT_NAME(p.[object_id]) <span class=\"kwrd\">AS<\/span> [<span class=\"kwrd\">Object<\/span> Name],<\/pre>\n<pre class=\"alt\">    p.index_id, <span class=\"kwrd\">COUNT<\/span>(*)\/128 <span class=\"kwrd\">AS<\/span> [Buffer <span class=\"kwrd\">size<\/span>(MB)],  <span class=\"kwrd\">COUNT<\/span>(*) <span class=\"kwrd\">AS<\/span> [Buffer <span class=\"kwrd\">Count<\/span>], \r\n    p.data_compression_desc <span class=\"kwrd\">AS<\/span> [Compression Type]<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">FROM<\/span> sys.allocation_units <span class=\"kwrd\">AS<\/span> a <span class=\"kwrd\">WITH<\/span> (NOLOCK)\r\n    <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> sys.dm_os_buffer_descriptors <span class=\"kwrd\">AS<\/span> b <span class=\"kwrd\">WITH<\/span> (NOLOCK)<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">ON<\/span> a.allocation_unit_id = b.allocation_unit_id\r\n    <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> sys.partitions <span class=\"kwrd\">AS<\/span> p <span class=\"kwrd\">WITH<\/span> (NOLOCK)<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">ON<\/span> a.container_id = p.hobt_id\r\n    <span class=\"kwrd\">WHERE<\/span> b.database_id = DB_ID()<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">AND<\/span> OBJECT_NAME(p.[object_id]) = @TableName\r\n    <span class=\"kwrd\">AND<\/span> p.[object_id] &gt; 100<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">GROUP<\/span> <span class=\"kwrd\">BY<\/span> p.[object_id], p.index_id, p.data_compression_desc\r\n    <span class=\"kwrd\">ORDER<\/span> <span class=\"kwrd\">BY<\/span> [Buffer <span class=\"kwrd\">Count<\/span>] <span class=\"kwrd\">DESC<\/span>;<\/pre>\n<pre class=\"alt\"><\/pre>\n<pre class=\"alt\">\u00a0\r\n    <span class=\"rem\">-- Get the current and estimated size for every index in specified table<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">DECLARE<\/span> curIndexID <span class=\"kwrd\">CURSOR<\/span> FAST_FORWARD\r\n    <span class=\"kwrd\">FOR<\/span><\/pre>\n<pre class=\"alt\">        <span class=\"rem\">-- Get list of index IDs for this table<\/span>\r\n        <span class=\"kwrd\">SELECT<\/span> i.index_id<\/pre>\n<pre class=\"alt\">        <span class=\"kwrd\">FROM<\/span> sys.indexes <span class=\"kwrd\">AS<\/span> i <span class=\"kwrd\">WITH<\/span> (NOLOCK)\r\n        <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> sys.tables <span class=\"kwrd\">AS<\/span> t <span class=\"kwrd\">WITH<\/span> (NOLOCK)<\/pre>\n<pre class=\"alt\">        <span class=\"kwrd\">ON<\/span> i.[object_id] = t.[object_id]\r\n        <span class=\"kwrd\">WHERE<\/span> t.type_desc = N<span class=\"str\">'USER_TABLE'<\/span><\/pre>\n<pre class=\"alt\">        <span class=\"kwrd\">AND<\/span> OBJECT_NAME(t.[object_id]) = @TableName\r\n        <span class=\"kwrd\">ORDER<\/span> <span class=\"kwrd\">BY<\/span> i.index_id;<\/pre>\n<pre class=\"alt\">\u00a0\r\n    <span class=\"kwrd\">OPEN<\/span> curIndexID;<\/pre>\n<pre class=\"alt\">\u00a0\r\n    <span class=\"kwrd\">FETCH<\/span> <span class=\"kwrd\">NEXT<\/span> <span class=\"kwrd\">FROM<\/span> curIndexID <span class=\"kwrd\">INTO<\/span> @IndexID;<\/pre>\n<pre class=\"alt\">\u00a0\r\n    <span class=\"rem\">-- Loop through every index in the table and run sp_estimate_data_compression_savings<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">WHILE<\/span> <span class=\"preproc\">@@FETCH_STATUS<\/span> = 0\r\n        <span class=\"kwrd\">BEGIN<\/span><\/pre>\n<pre class=\"alt\">            <span class=\"rem\">-- Get current and estimated size for specified index with specified compression type<\/span>\r\n            <span class=\"kwrd\">EXEC<\/span> sp_estimate_data_compression_savings @SchemaName, @TableName, @IndexID, <span class=\"kwrd\">NULL<\/span>, @CompressionType;<\/pre>\n<pre class=\"alt\">\u00a0\r\n            <span class=\"kwrd\">FETCH<\/span> <span class=\"kwrd\">NEXT<\/span><\/pre>\n<pre class=\"alt\">            <span class=\"kwrd\">FROM<\/span> curIndexID\r\n            <span class=\"kwrd\">INTO<\/span> @IndexID;<\/pre>\n<pre class=\"alt\">        <span class=\"kwrd\">END<\/span><\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">CLOSE<\/span> curIndexID;\r\n    <span class=\"kwrd\">DEALLOCATE<\/span> curIndexID;<\/pre>\n<pre class=\"alt\"><\/pre>\n<pre class=\"alt\">    <span class=\"rem\">-- Index Read\/Write stats for this table<\/span>\r\n    <span class=\"kwrd\">SELECT<\/span> OBJECT_NAME(s.[object_id]) <span class=\"kwrd\">AS<\/span> [TableName],<\/pre>\n<pre class=\"alt\">    i.name <span class=\"kwrd\">AS<\/span> [IndexName], i.index_id,\r\n    <span class=\"kwrd\">SUM<\/span>(user_seeks) <span class=\"kwrd\">AS<\/span> [<span class=\"kwrd\">User<\/span> Seeks], <span class=\"kwrd\">SUM<\/span>(user_scans) <span class=\"kwrd\">AS<\/span> [<span class=\"kwrd\">User<\/span> Scans],<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">SUM<\/span>(user_lookups)<span class=\"kwrd\">AS<\/span> [<span class=\"kwrd\">User<\/span> Lookups],\r\n    <span class=\"kwrd\">SUM<\/span>(user_seeks + user_scans + user_lookups)<span class=\"kwrd\">AS<\/span> [Total <span class=\"kwrd\">Reads<\/span>],<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">SUM<\/span>(user_updates) <span class=\"kwrd\">AS<\/span> [Total Writes]     \r\n    <span class=\"kwrd\">FROM<\/span> sys.dm_db_index_usage_stats <span class=\"kwrd\">AS<\/span> s <span class=\"kwrd\">WITH<\/span> (NOLOCK)<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">INNER<\/span> <span class=\"kwrd\">JOIN<\/span> sys.indexes <span class=\"kwrd\">AS<\/span> i <span class=\"kwrd\">WITH<\/span> (NOLOCK)\r\n    <span class=\"kwrd\">ON<\/span> s.[object_id] = i.[object_id]<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">AND<\/span> i.index_id = s.index_id\r\n    <span class=\"kwrd\">WHERE<\/span> OBJECTPROPERTY(s.[object_id],<span class=\"str\">'IsUserTable'<\/span>) = 1<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">AND<\/span> s.database_id = DB_ID()\r\n    <span class=\"kwrd\">AND<\/span> OBJECT_NAME(s.[object_id]) = @TableName<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">GROUP<\/span> <span class=\"kwrd\">BY<\/span> OBJECT_NAME(s.[object_id]), i.name, i.index_id\r\n    <span class=\"kwrd\">ORDER<\/span> <span class=\"kwrd\">BY<\/span> [Total Writes] <span class=\"kwrd\">DESC<\/span>, [Total <span class=\"kwrd\">Reads<\/span>] <span class=\"kwrd\">DESC<\/span>;<\/pre>\n<pre class=\"alt\"><\/pre>\n<pre class=\"alt\">    <span class=\"rem\">-- Get basic index information (does not include filtered indexes or included columns)<\/span>\r\n    <span class=\"kwrd\">EXEC<\/span> sp_helpindex @FullName;<\/pre>\n<pre class=\"alt\"><\/pre>\n<pre class=\"alt\">    <span class=\"rem\">-- Individual File Sizes and space available for current database  <\/span>\r\n    <span class=\"kwrd\">SELECT<\/span> f.name <span class=\"kwrd\">AS<\/span> [<span class=\"kwrd\">File<\/span> Name] , f.physical_name <span class=\"kwrd\">AS<\/span> [Physical Name],<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">CAST<\/span>((f.<span class=\"kwrd\">size<\/span>\/128.0) <span class=\"kwrd\">AS<\/span> <span class=\"kwrd\">decimal<\/span>(15,2)) <span class=\"kwrd\">AS<\/span> [Total <span class=\"kwrd\">Size<\/span> <span class=\"kwrd\">in<\/span> MB],\r\n    <span class=\"kwrd\">CAST<\/span>(f.<span class=\"kwrd\">size<\/span>\/128.0 - <span class=\"kwrd\">CAST<\/span>(FILEPROPERTY(f.name, <span class=\"str\">'SpaceUsed'<\/span>) <span class=\"kwrd\">AS<\/span> <span class=\"kwrd\">int<\/span>)\/128.0 <span class=\"kwrd\">AS<\/span> <span class=\"kwrd\">decimal<\/span>(15,2))<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">AS<\/span> [Available <span class=\"kwrd\">Space<\/span> <span class=\"kwrd\">In<\/span> MB], [file_id], fg.name <span class=\"kwrd\">AS<\/span> [Filegroup Name]\r\n    <span class=\"kwrd\">FROM<\/span> sys.database_files <span class=\"kwrd\">AS<\/span> f <span class=\"kwrd\">WITH<\/span> (NOLOCK)<\/pre>\n<pre class=\"alt\">    <span class=\"kwrd\">LEFT<\/span> <span class=\"kwrd\">OUTER<\/span> <span class=\"kwrd\">JOIN<\/span> sys.data_spaces <span class=\"kwrd\">AS<\/span> fg <span class=\"kwrd\">WITH<\/span> (NOLOCK) \r\n    <span class=\"kwrd\">ON<\/span> f.data_space_id = fg.data_space_id <span class=\"kwrd\">OPTION<\/span> (RECOMPILE);<\/pre>\n<\/div>\n<style type=\"text\/css\"><!--\n.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }\n--><\/style>\n","protected":false},"excerpt":{"rendered":"<p>SQL Server Data Compression (which was first introduced in SQL Server 2008, and is an Enterprise Edition only feature) lets you compress individual indexes with either ROW or PAGE compression. It can be a huge win for many SQL Server workloads, by letting you reduce both your required disk I\/O and your memory usage at [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[123,29,30,31],"tags":[124,134],"class_list":["post-712","post","type-post","status-publish","format-standard","hentry","category-data-compression","category-sql-server-2008","category-sql-server-2008-r2","category-sql-server-2012","tag-data-compression-savings","tag-sql-server-data-compression"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Estimating Data Compression Savings in SQL Server 2012 - Glenn Berry<\/title>\n<meta name=\"description\" content=\"Describes how the process of estimating data compression savings in SQL Server 2012 works\" \/>\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\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Estimating Data Compression Savings in SQL Server 2012 - Glenn Berry\" \/>\n<meta property=\"og:description\" content=\"Describes how the process of estimating data compression savings in SQL Server 2012 works\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/\" \/>\n<meta property=\"og:site_name\" content=\"Glenn Berry\" \/>\n<meta property=\"article:published_time\" content=\"2013-04-12T19:30:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-04-16T19:37:09+00:00\" \/>\n<meta name=\"author\" content=\"Glenn Berry\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Glenn Berry\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/\",\"name\":\"Estimating Data Compression Savings in SQL Server 2012 - Glenn Berry\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website\"},\"datePublished\":\"2013-04-12T19:30:24+00:00\",\"dateModified\":\"2013-04-16T19:37:09+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7\"},\"description\":\"Describes how the process of estimating data compression savings in SQL Server 2012 works\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Estimating Data Compression Savings in SQL Server 2012\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/\",\"name\":\"Glenn Berry\",\"description\":\"Semi-random musings about SQL Server performance\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/?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\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7\",\"name\":\"Glenn Berry\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g\",\"caption\":\"Glenn Berry\"},\"sameAs\":[\"https:\/\/www.sqlskills.com\/blogs\/glenn\/\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/author\/glenn\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Estimating Data Compression Savings in SQL Server 2012 - Glenn Berry","description":"Describes how the process of estimating data compression savings in SQL Server 2012 works","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\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/","og_locale":"en_US","og_type":"article","og_title":"Estimating Data Compression Savings in SQL Server 2012 - Glenn Berry","og_description":"Describes how the process of estimating data compression savings in SQL Server 2012 works","og_url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/","og_site_name":"Glenn Berry","article_published_time":"2013-04-12T19:30:24+00:00","article_modified_time":"2013-04-16T19:37:09+00:00","author":"Glenn Berry","twitter_misc":{"Written by":"Glenn Berry","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/","url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/","name":"Estimating Data Compression Savings in SQL Server 2012 - Glenn Berry","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website"},"datePublished":"2013-04-12T19:30:24+00:00","dateModified":"2013-04-16T19:37:09+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7"},"description":"Describes how the process of estimating data compression savings in SQL Server 2012 works","breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/estimating-data-compression-savings-in-sql-server-2012\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/glenn\/"},{"@type":"ListItem","position":2,"name":"Estimating Data Compression Savings in SQL Server 2012"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/","name":"Glenn Berry","description":"Semi-random musings about SQL Server performance","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/glenn\/?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\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7","name":"Glenn Berry","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g","caption":"Glenn Berry"},"sameAs":["https:\/\/www.sqlskills.com\/blogs\/glenn\/"],"url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/author\/glenn\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/posts\/712","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/comments?post=712"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/posts\/712\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/media?parent=712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/categories?post=712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/tags?post=712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}