{"id":1653,"date":"2018-08-14T08:54:03","date_gmt":"2018-08-14T08:54:03","guid":{"rendered":"http:\/\/dbtut.com\/?p=1653"},"modified":"2018-11-09T23:00:18","modified_gmt":"2018-11-09T23:00:18","slug":"pg-tuning-statistics-and-indexes","status":"publish","type":"post","link":"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/","title":{"rendered":"PG Tuning, Statistics and Indexes"},"content":{"rendered":"<p><span style=\"text-decoration: underline; font-size: 14pt;\"><strong>Database Tuning<\/strong><\/span><\/p>\n<p>Fundamentally, database performance tuning is done for two basic reasons, to reduce response time and to reduce resource\u00a0usage, both of which can apply for any given situation. Julian Stuhler looks at database performance tuning, and why it remains\u00a0one of the most important topics for any DBA, developer or systems administrator.<\/p>\n<p><strong>Why Bother with Database Performance?<\/strong><\/p>\n<p>So, what\u2019s the big deal with database performance? Fundamentally, database performance tuning is done\u00a0for two basic reasons, and either or both can apply for any given situation:<\/p>\n<p>Reduce response time. With today\u2019s internet-enabled, customer facing applications, providing sub-second\u00a0response times for OLTP applications has never been more critical. A few years ago, a skilled telephone\u00a0customer support operative could hide longer response times for account queries by chatting with the<br \/>\ncaller, but now that the customer has direct access to those same systems, any delays become much more\u00a0obvious. Many studies have demonstrated the link between response time and customer satisfaction for\u00a0online B2C applications, and when your nearest competitor is only a click away, keeping customers happy is<br \/>\nparamount. Although database performance is just one component of the overall end-to-end response\u00a0time experienced by the customer, it is often the most critical and variable one.<\/p>\n<p>Reduce resource usage. Running any sort of query against a database generates a load on the database\u00a0server, and the less efficiently that query runs the more CPU and I\/O it will require. These are finite\u00a0resources for a given server configuration, so the transaction throughput can be limited at peak times<br \/>\n(potentially leading to a response time issue as described above). Tuning a system to reduce the CPU\u00a0and\/or I\/O resources required can have a significant impact on the transaction throughput for a given\u00a0server, potentially allowing expensive upgrades to be avoided or deferred. Reducing resource usage can be<br \/>\neven more important in a mainframe environment, where most customers are on some form of Monthly\u00a0Licence Charge (MLC) model. With MLC, the amount a System z customer pays depends on the amount of\u00a0processor resource consumed during the previous period, measured in MSUs (Million Service Units). So, the<br \/>\nmonthly cost paid by most customers for their IBM software is directly related to the amount of work their\u00a0CPs process: the higher the workload, the higher the monthly cost. Tuning the application to reduce CPU\u00a0costs can generate immediate savings in software licence fee charges.<\/p>\n<p><span style=\"text-decoration: underline;\"><span style=\"font-size: 14pt;\"><strong>Database Statistics<\/strong><\/span><\/span><\/p>\n<ul>\n<li>The <strong>pg_stats_statements<\/strong> module is a great\u00a0place to start. It simply tracks execution\u00a0statistics of SQL statements and can be an\u00a0easy way to find poor performing queries.Once you have this module installed, a\u00a0system view named pg_stat_statements will\u00a0be available with all sorts of goodness. Once\u00a0it has had a chance to collect a good amount\u00a0of data, look for queries that have relatively\u00a0high total_time value. Focus on these\u00a0statements first.<\/li>\n<\/ul>\n<pre class=\"lang:default decode:true \">SELECT * FROM pg_stat_statements\u00a0ORDER BY total_time DESC;<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li>Auto_explain<\/li>\n<\/ul>\n<p>The auto_explain module is also helpful for\u00a0finding slow queries but has 2 distinct\u00a0advantages: it logs the actual execution plan\u00a0and supports logging nested<br \/>\nstatements using\u00a0the log_nested_statements option. Nested\u00a0statements are those statements that are\u00a0executed inside a function. If your\u00a0application uses\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0many functions,\u00a0auto_explain is invaluable for getting\u00a0detailed execution plans.\u00a0The log_min_duration option controls which\u00a0query execution plans are\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0logged, based on\u00a0how long they perform. For example, if you\u00a0set this to 1000, all statements that run longer\u00a0than\u00a01 second will be logged.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\"><strong>Optimized Index<\/strong><\/span><\/p>\n<ul>\n<li>Index Tuning\/Optimization<\/li>\n<\/ul>\n<p>The Postgres Statistics Collector is a first\u00a0class subsystem that collects all sorts of\u00a0performance statistics that are useful.<\/p>\n<p>Turning this collector on gives you tons\u00a0of pg_stat_&#8230; views which contain all the\u00a0goodness. In particular, I have found it\u00a0to be particularly useful for finding<br \/>\nmissing and unused indexes.<\/p>\n<ul>\n<li>Missing Indexes<\/li>\n<\/ul>\n<p>Missing indexes can be one of the easiest solutions to increasing query performance. However, they are not a silver\u00a0bullet and should be used properly (more\u00a0 \u00a0 \u00a0 \u00a0 \u00a0on that later). If you have The Statistics Collector turned on, you can run the\u00a0following query.<\/p>\n<pre class=\"lang:default decode:true\">SELECT relname, seq_scan - idx_scan AS too_much_seq,\u00a0CASE\u00a0WHEN\u00a0 seq_scan - idx_scan &gt; 0\r\nTHEN\u00a0'Missing Index?'\r\nELSE\r\n'OK'\r\nEND,\r\npg_relation_size(relname::regclass) AS rel_size, seq_scan, idx_scan\u00a0FROM\u00a0pg_stat_all_tables\r\nWHERE\u00a0schemaname = 'public'\u00a0AND pg_relation_size(relname::regclass) &gt; 80000\r\nORDER BY\u00a0too_much_seq DESC;<\/pre>\n<p>&nbsp;<\/p>\n<p>This finds tables that have had more Sequential Scans than Index Scans, a telltale sign that an index will usually\u00a0help. This isn\u2019t going to tell you which columns to create the index on so that will require a bit more work.\u00a0However, knowing which table(s) need them is a good first step.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Unused Indexes<\/li>\n<\/ul>\n<p>Index all the things right? Did you know having unused\u00a0indexes can negatively affect write performance? The\u00a0reason is, when you create an index, Postgres is burdened\u00a0with the task of keeping this index updated after write\u00a0(INSERT \/ UPDATE \/ DELETE) operations. So, adding an index\u00a0is a balancing act because they can speed up reading of data\u00a0(if created properly) but will slow down write operations. To\u00a0find unused indexes you can run the following command.<\/p>\n<pre class=\"lang:default decode:true\">SELECT indexrelid::regclass as index,\u00a0relid::regclass as table,\u00a0'DROP INDEX ' || indexrelid::regclass || ';' as drop_statement\r\nFROM pg_stat_user_indexes\r\nJOIN pg_index USING (indexrelid)\r\nWHERE idx_scan = 0\u00a0AND indisunique is false;<\/pre>\n\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_1653\" class=\"pvc_stats all  \" data-element-id=\"1653\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/dbtut.com\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Database Tuning Fundamentally, database performance tuning is done for two basic reasons, to reduce response time and to reduce resource\u00a0usage, both of which can apply for any given situation. Julian Stuhler looks at database performance tuning, and why it remains\u00a0one of the most important topics for any DBA, developer or systems administrator. Why Bother with &hellip;<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_1653\" class=\"pvc_stats all  \" data-element-id=\"1653\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/dbtut.com\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":109,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1653","post","type-post","status-publish","format-standard","","category-postgres"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PG Tuning, Statistics and Indexes - Database Tutorials<\/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:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PG Tuning, Statistics and Indexes - Database Tutorials\" \/>\n<meta property=\"og:description\" content=\"Database Tuning Fundamentally, database performance tuning is done for two basic reasons, to reduce response time and to reduce resource\u00a0usage, both of which can apply for any given situation. Julian Stuhler looks at database performance tuning, and why it remains\u00a0one of the most important topics for any DBA, developer or systems administrator. Why Bother with &hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/\" \/>\n<meta property=\"og:site_name\" content=\"Database Tutorials\" \/>\n<meta property=\"article:published_time\" content=\"2018-08-14T08:54:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-11-09T23:00:18+00:00\" \/>\n<meta name=\"author\" content=\"Vaibhav Krishna\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vaibhav Krishna\" \/>\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\":\"Article\",\"@id\":\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/\"},\"author\":{\"name\":\"Vaibhav Krishna\",\"@id\":\"https:\/\/dbtut.com\/#\/schema\/person\/6c10f95f66ae2b4026552b02018b18b7\"},\"headline\":\"PG Tuning, Statistics and Indexes\",\"datePublished\":\"2018-08-14T08:54:03+00:00\",\"dateModified\":\"2018-11-09T23:00:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/\"},\"wordCount\":829,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/dbtut.com\/#organization\"},\"articleSection\":[\"PostgreSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/\",\"url\":\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/\",\"name\":\"PG Tuning, Statistics and Indexes - Database Tutorials\",\"isPartOf\":{\"@id\":\"https:\/\/dbtut.com\/#website\"},\"datePublished\":\"2018-08-14T08:54:03+00:00\",\"dateModified\":\"2018-11-09T23:00:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/dbtut.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PG Tuning, Statistics and Indexes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/dbtut.com\/#website\",\"url\":\"https:\/\/dbtut.com\/\",\"name\":\"Database Tutorials\",\"description\":\"MSSQL, Oracle, PostgreSQL, MySQL, MariaDB, DB2, Sybase, Teradata, Big Data, NOSQL, MongoDB, Couchbase, Cassandra, Windows, Linux\",\"publisher\":{\"@id\":\"https:\/\/dbtut.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/dbtut.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/dbtut.com\/#organization\",\"name\":\"dbtut\",\"url\":\"https:\/\/dbtut.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/dbtut.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/dbtut.com\/wp-content\/uploads\/2021\/02\/dbtutlogo.jpg\",\"contentUrl\":\"https:\/\/dbtut.com\/wp-content\/uploads\/2021\/02\/dbtutlogo.jpg\",\"width\":223,\"height\":36,\"caption\":\"dbtut\"},\"image\":{\"@id\":\"https:\/\/dbtut.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/dbtut.com\/#\/schema\/person\/6c10f95f66ae2b4026552b02018b18b7\",\"name\":\"Vaibhav Krishna\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/dbtut.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/482ae666004473e37e849efeedbf7111152f716f6e9fc6852074d49536796697?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/482ae666004473e37e849efeedbf7111152f716f6e9fc6852074d49536796697?s=96&d=mm&r=g\",\"caption\":\"Vaibhav Krishna\"},\"url\":\"https:\/\/dbtut.com\/index.php\/author\/vaibhavkrishna\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PG Tuning, Statistics and Indexes - Database Tutorials","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:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/","og_locale":"en_US","og_type":"article","og_title":"PG Tuning, Statistics and Indexes - Database Tutorials","og_description":"Database Tuning Fundamentally, database performance tuning is done for two basic reasons, to reduce response time and to reduce resource\u00a0usage, both of which can apply for any given situation. Julian Stuhler looks at database performance tuning, and why it remains\u00a0one of the most important topics for any DBA, developer or systems administrator. Why Bother with &hellip;","og_url":"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/","og_site_name":"Database Tutorials","article_published_time":"2018-08-14T08:54:03+00:00","article_modified_time":"2018-11-09T23:00:18+00:00","author":"Vaibhav Krishna","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Vaibhav Krishna","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/#article","isPartOf":{"@id":"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/"},"author":{"name":"Vaibhav Krishna","@id":"https:\/\/dbtut.com\/#\/schema\/person\/6c10f95f66ae2b4026552b02018b18b7"},"headline":"PG Tuning, Statistics and Indexes","datePublished":"2018-08-14T08:54:03+00:00","dateModified":"2018-11-09T23:00:18+00:00","mainEntityOfPage":{"@id":"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/"},"wordCount":829,"commentCount":0,"publisher":{"@id":"https:\/\/dbtut.com\/#organization"},"articleSection":["PostgreSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/","url":"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/","name":"PG Tuning, Statistics and Indexes - Database Tutorials","isPartOf":{"@id":"https:\/\/dbtut.com\/#website"},"datePublished":"2018-08-14T08:54:03+00:00","dateModified":"2018-11-09T23:00:18+00:00","breadcrumb":{"@id":"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/dbtut.com\/index.php\/2018\/08\/14\/pg-tuning-statistics-and-indexes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dbtut.com\/"},{"@type":"ListItem","position":2,"name":"PG Tuning, Statistics and Indexes"}]},{"@type":"WebSite","@id":"https:\/\/dbtut.com\/#website","url":"https:\/\/dbtut.com\/","name":"Database Tutorials","description":"MSSQL, Oracle, PostgreSQL, MySQL, MariaDB, DB2, Sybase, Teradata, Big Data, NOSQL, MongoDB, Couchbase, Cassandra, Windows, Linux","publisher":{"@id":"https:\/\/dbtut.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dbtut.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/dbtut.com\/#organization","name":"dbtut","url":"https:\/\/dbtut.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dbtut.com\/#\/schema\/logo\/image\/","url":"https:\/\/dbtut.com\/wp-content\/uploads\/2021\/02\/dbtutlogo.jpg","contentUrl":"https:\/\/dbtut.com\/wp-content\/uploads\/2021\/02\/dbtutlogo.jpg","width":223,"height":36,"caption":"dbtut"},"image":{"@id":"https:\/\/dbtut.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/dbtut.com\/#\/schema\/person\/6c10f95f66ae2b4026552b02018b18b7","name":"Vaibhav Krishna","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dbtut.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/482ae666004473e37e849efeedbf7111152f716f6e9fc6852074d49536796697?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/482ae666004473e37e849efeedbf7111152f716f6e9fc6852074d49536796697?s=96&d=mm&r=g","caption":"Vaibhav Krishna"},"url":"https:\/\/dbtut.com\/index.php\/author\/vaibhavkrishna\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/posts\/1653","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/users\/109"}],"replies":[{"embeddable":true,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/comments?post=1653"}],"version-history":[{"count":0,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/posts\/1653\/revisions"}],"wp:attachment":[{"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/media?parent=1653"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/categories?post=1653"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/tags?post=1653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}