{"id":7362,"date":"2018-09-26T07:30:16","date_gmt":"2018-09-26T10:30:16","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=7362"},"modified":"2020-10-05T13:30:31","modified_gmt":"2020-10-05T16:30:31","slug":"ajustando-o-postgresql-para-melhorar-a-performance-do-postgis","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2018\/09\/26\/ajustando-o-postgresql-para-melhorar-a-performance-do-postgis\/","title":{"rendered":"Ajustando o PostgreSQL para melhorar a performance do PostGIS"},"content":{"rendered":"<p>O PostgreSQL \u00e9 um sistema de banco de dados muito vers\u00e1til, capaz de funcionar eficientemente em ambientes de recursos muito baixos e ambientes compartilhados com uma variedade de outros aplicativos. Para garantir que ele seja executado adequadamente em muitos ambientes diferentes, a configura\u00e7\u00e3o padr\u00e3o \u00e9 muito conservadora e n\u00e3o \u00e9 muito apropriada para um banco de dados de produ\u00e7\u00e3o de alto desempenho. Adicione o fato de que os bancos de dados geoespaciais t\u00eam padr\u00f5es de uso diferentes, e os dados tendem a consistir em menos registros, muito maiores do que os bancos de dados n\u00e3o espaciais, e voc\u00ea pode ver que a configura\u00e7\u00e3o padr\u00e3o n\u00e3o ser\u00e1 totalmente apropriada para nossos prop\u00f3sitos.<\/p>\n<p>Com esse objetivo, irei apresentar abaixo alguns par\u00e2metros que voc\u00ea pode alterar para que o seu PostGIS &#8220;voe&#8221;. Para cada par\u00e2metro irei dar uma breve descri\u00e7\u00e3o falando para que ele serve, o seu valor padr\u00e3o e qual o valor que sugiro a voc\u00ea alter\u00e1-lo. <\/p>\n<p>Lembrando que essa \u00e9 uma sugest\u00e3o e voc\u00ea analisando sua infraestrutura e o volume da sua base de dados pode colocar valores mais apropriados para sua realidade.<\/p>\n<p>1.\tConfigura\u00e7\u00f5es no postgresql.conf:<\/p>\n<p><strong>1.1\t Shared buffer<\/strong>: Define a quantidade de mem\u00f3ria que o servidor de banco de dados usa para buffers de mem\u00f3ria compartilhada. Estes s\u00e3o compartilhados entre os processos de back-end, como o nome sugere. Os valores padr\u00e3o s\u00e3o normalmente insuficientes para bancos de dados de produ\u00e7\u00e3o.<\/p>\n<p>Valor padr\u00e3o: 32 mb<br \/>\nValor recomendado: At\u00e9 75% da mem\u00f3ria do banco de dados<\/p>\n<p><strong>1.2\t Work men<\/strong>: Define a quantidade de mem\u00f3ria que as opera\u00e7\u00f5es internas de classifica\u00e7\u00e3o e as tabelas de hash podem consumir antes de o banco de dados alternar para arquivos em disco. Este valor define a mem\u00f3ria dispon\u00edvel para cada opera\u00e7\u00e3o; consultas complexas podem ter v\u00e1rias opera\u00e7\u00f5es de classifica\u00e7\u00e3o ou hash sendo executadas em paralelo e cada sess\u00e3o conectada pode estar executando uma consulta.<\/p>\n<p>Dessa forma, voc\u00ea deve considerar quantas conex\u00f5es e a complexidade das consultas esperadas antes de aumentar esse valor. O benef\u00edcio de aumentar \u00e9 que o processamento de mais dessas opera\u00e7\u00f5es, incluindo cl\u00e1usulas ORDER BY e DISTINCT, jun\u00e7\u00f5es de mesclagem e hash, agrega\u00e7\u00e3o baseada em hash e processamento baseado em hash de subconsultas, pode ser realizado sem incorrer em grava\u00e7\u00f5es em disco.<\/p>\n<p>Valor padr\u00e3o: 4 mb<br \/>\nValor recomendado: 16 MB<\/p>\n<p><strong>1.3\t Maintenance_work_mem<\/strong>: Define a quantidade de mem\u00f3ria usada para opera\u00e7\u00f5es de manuten\u00e7\u00e3o, incluindo cria\u00e7\u00e3o de aspira\u00e7\u00e3o, \u00edndice e chave estrangeira. Como essas opera\u00e7\u00f5es n\u00e3o s\u00e3o muito comuns, o valor padr\u00e3o pode ser aceit\u00e1vel.<\/p>\n<p>Valor padr\u00e3o: 64 mb<br \/>\nValor recomendado: 64 MB<\/p>\n<p><strong>1.4\t Wal_buffers<\/strong>: Define a quantidade de mem\u00f3ria usada para dados de registro de adiantamento (WAL). Os registros de write-ahead fornecem um mecanismo de alto desempenho para garantir a integridade dos dados. Durante cada comando de altera\u00e7\u00e3o, os efeitos das altera\u00e7\u00f5es s\u00e3o gravados primeiro nos arquivos WAL e liberados no disco. Apenas quando os arquivos WAL forem liberados, as altera\u00e7\u00f5es ser\u00e3o gravadas nos pr\u00f3prios arquivos de dados. Isso permite que os arquivos de dados sejam gravados no disco de maneira ideal e ass\u00edncrona, garantindo que, em caso de falha, todas as altera\u00e7\u00f5es de dados possam ser recuperadas do WAL.<\/p>\n<p>O tamanho desse buffer precisa ser grande o suficiente para conter os dados do WAL para uma \u00fanica transa\u00e7\u00e3o t\u00edpica. Embora o valor padr\u00e3o geralmente seja suficiente para a maioria dos dados, os dados geoespaciais tendem a ser muito maiores. Portanto, recomenda-se aumentar o tamanho desse par\u00e2metro.<\/p>\n<p>Valor padr\u00e3o: 64k<br \/>\nValor recomendado: 1 MB<\/p>\n<p><strong>1.5\t Random_page_cost<\/strong>: Esse \u00e9 um valor sem unidade que representa o custo de um acesso aleat\u00f3rio a uma p\u00e1gina do disco. Esse valor \u00e9 relativo a v\u00e1rios outros par\u00e2metros de custo, incluindo acesso sequencial \u00e0 p\u00e1gina e custos de opera\u00e7\u00e3o da CPU. Embora n\u00e3o haja um marcador m\u00e1gico para esse valor, o padr\u00e3o \u00e9 geralmente conservador.<\/p>\n<p>Valor padr\u00e3o: 4.0<br \/>\nValor recomendado: 2.0<\/p>\n<p><strong>1.6\t Seq_page_cost<\/strong>: Esse \u00e9 o par\u00e2metro que controla o custo de um acesso de p\u00e1gina seq\u00fcencial. Esse valor geralmente n\u00e3o requer ajuste, mas a diferen\u00e7a entre esse valor e random_page_cost afeta muito as escolhas feitas pelo planejador de consulta. Esse valor tamb\u00e9m pode ser definido em uma base por sess\u00e3o<br \/>\nValor padr\u00e3o: 1.0<br \/>\nValor recomendado: 1.0<\/p>\n<p>Ap\u00f3s alterar a configura\u00e7\u00e3o do banco \u00e9 necess\u00e1rio reiniciar o servi\u00e7o para que elas possam ser carregadas. Com a altera\u00e7\u00e3o desses par\u00e2metros o banco de dados j\u00e1 deve ter um aumento significativo na performance.<\/p>\n<p>Se preferir pode assistir ao v\u00eddeo do YouTube com esse cont\u00e9udo:<\/p>\n<p><center><br \/>\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/5b4V8otRf5U\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><br \/>\n<\/center><\/p>\n<p>Fonte: <a href=\"http:\/\/workshops.boundlessgeo.com\/postgis-intro\/tuning.html\" rel=\"noopener noreferrer\" target=\"_blank\">Boundless<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O PostgreSQL \u00e9 um sistema de banco de dados muito vers\u00e1til, capaz de funcionar eficientemente em ambientes de recursos muito baixos e ambientes compartilhados com uma variedade de outros aplicativos. Para garantir que ele seja executado adequadamente em muitos ambientes&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2018\/09\/26\/ajustando-o-postgresql-para-melhorar-a-performance-do-postgis\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":7366,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[212,230],"class_list":["post-7362","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-postgis","tag-postgresql"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=7362"}],"version-history":[{"count":10,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7362\/revisions"}],"predecessor-version":[{"id":8969,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7362\/revisions\/8969"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/7366"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=7362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=7362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=7362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}