{"id":12715,"date":"2022-01-25T13:41:03","date_gmt":"2022-01-25T21:41:03","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=12715"},"modified":"2025-06-13T19:26:34","modified_gmt":"2025-06-14T02:26:34","slug":"analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/","title":{"rendered":"An\u00e1lise de estat\u00edsticas para otimiza\u00e7\u00e3o baseada em custos no Couchbase 7.0"},"content":{"rendered":"<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/\">Servidor Couchbase 7.0<\/a> (Enterprise Edition) introduziu um otimizador baseado em custo (CBO). As vers\u00f5es anteriores do Couchbase Server usavam um otimizador baseado em regras (RBO). O Couchbase Server evoluiu naturalmente do RBO para o CBO, como a maioria dos principais sistemas de bancos de dados relacionais.<\/p>\n<p>O CBO usa estimativas de custo para escolher um plano de consulta calculado a partir de estat\u00edsticas do otimizador. As estat\u00edsticas do otimizador s\u00e3o coletadas usando as instru\u00e7\u00f5es UPDATE STATISTICS ou ANALYZE em uma consulta SQL++ (denominada abaixo como N1QL).<\/p>\n<h4>Declara\u00e7\u00e3o UPDATE STATISTICS\/ANALYZE<\/h4>\n<p>O novo <em>UPDATE STATISTICS ou ANALYZE<\/em> acionam a coleta de estat\u00edsticas do otimizador necess\u00e1rias para a funcionalidade do CBO. Atualmente, um usu\u00e1rio emite essas novas instru\u00e7\u00f5es manualmente, o que calcula as estat\u00edsticas do otimizador no espa\u00e7o-chave\/cole\u00e7\u00e3o, os \u00edndices definidos no espa\u00e7o-chave\/cole\u00e7\u00e3o e as informa\u00e7\u00f5es de distribui\u00e7\u00e3o (como histogramas) em uma lista de termos (express\u00f5es).<\/p>\n<p>Quando h\u00e1 v\u00e1rios n\u00f3s de consulta, as estat\u00edsticas do otimizador coletadas de um n\u00f3 de consulta est\u00e3o dispon\u00edveis em todos os n\u00f3s de consulta.<\/p>\n<h5><strong>O novo N1QL_SYSTEM_BUCKET<\/strong><\/h5>\n<p>O novo otimizador coleta estat\u00edsticas por meio do <em>ATUALIZA ESTAT\u00cdSTICAS\/AN\u00c1LISES<\/em> e os armazena em um novo bucket (<em>N1QL_SYSTEM_BUCKET<\/em>), especificamente em um novo escopo (<em>N1QL_SYSTEM_SCOPE<\/em>) e uma nova cole\u00e7\u00e3o (<em>N1QL_CBO_STATS<\/em>).<\/p>\n<p>Na primeira vez em que \u00e9 executado, o <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> cria automaticamente esse novo bucket\/escopo\/cole\u00e7\u00e3o. Um \u00edndice prim\u00e1rio tamb\u00e9m \u00e9 criado automaticamente.<\/p>\n<p><strong>Descarte do novo bucket\/escopo\/cole\u00e7\u00e3o<\/strong><br \/>\nEsses novos objetos do sistema (bucket, escopo, cole\u00e7\u00e3o) podem ser descartados do banco de dados, o que faz com que todas as estat\u00edsticas do otimizador n\u00e3o estejam mais dispon\u00edveis.<\/p>\n<p>Qualquer consulta futura n\u00e3o aproveitar\u00e1 a funcionalidade CBO at\u00e9 que um usu\u00e1rio solicite que as estat\u00edsticas sejam analisadas novamente. At\u00e9 esse momento, o sistema volta ao RBO para o planejamento da consulta.<\/p>\n<p><strong>Cota de mem\u00f3ria para o novo bucket\/escopo\/cole\u00e7\u00e3o<\/strong><br \/>\nO novo balde do sistema (<em>N1QL_SYSTEM_BUCKET<\/em>) \u00e9 criado com uma cota de mem\u00f3ria m\u00ednima de 100 MB. Em um sistema grande, os DBAs devem monitorar a resid\u00eancia de mem\u00f3ria no bucket e aumentar a cota de mem\u00f3ria quando necess\u00e1rio para evitar que a resid\u00eancia de mem\u00f3ria caia abaixo do n\u00edvel recomendado de 15%.<\/p>\n<h5>Sintaxe<\/h5>\n<p>Em um alto n\u00edvel, h\u00e1 tr\u00eas aspectos de um comando UPDATE STATISTICS\/ANALYZE:<br \/>\n<strong>1. Estat\u00edsticas de espa\u00e7o-chave\/coleta<\/strong> - coletados toda vez que uma instru\u00e7\u00e3o de atualiza\u00e7\u00e3o\/an\u00e1lise \u00e9 emitida<br \/>\n2. <strong>Estat\u00edsticas do \u00edndice<\/strong> - coletados para \u00edndices \"relevantes<br \/>\n3. <strong>Estat\u00edsticas de distribui\u00e7\u00e3o (histograma)<\/strong> - reunidos nos termos especificados.<\/p>\n<p>H\u00e1 v\u00e1rias maneiras de especificar a lista de termos para os quais as estat\u00edsticas de distribui\u00e7\u00e3o s\u00e3o coletadas.<\/p>\n<p><strong>Fornecimento de uma lista de termos para a cria\u00e7\u00e3o de estat\u00edsticas<\/strong><\/p>\n<pre class=\"\">UPDATE STATISTICS [FOR] keyspace(term1, term2, \u2026)\r\n\r\nANALYZE [KEYSPACE\/COLLECTION] keyspace(term1, term2, \u2026)<\/pre>\n<p>Essas duas declara\u00e7\u00f5es s\u00e3o equivalentes. A <em>ESTAT\u00cdSTICAS DE ATUALIZA\u00c7\u00c3O<\/em> tem uma palavra-chave FOR opcional seguida de um nome de espa\u00e7o-chave. O comando <em>ANALISAR<\/em> tem uma instru\u00e7\u00e3o opcional <em>ESPA\u00c7O-CHAVE<\/em> ou <em>COLE\u00c7\u00c3O<\/em> seguida de um nome de espa\u00e7o-chave.<\/p>\n<p>O nome do espa\u00e7o-chave \u00e9 normalmente um nome de cole\u00e7\u00e3o. Voc\u00ea pode especificar um nome de bucket como o nome do espa\u00e7o-chave; nesse caso, as estat\u00edsticas do otimizador s\u00e3o coletadas no <em>Padr\u00e3o<\/em> coleta sob o <em>Padr\u00e3o<\/em> escopo para esse balde.<\/p>\n<p>A lista de termos \u00e9 semelhante \u00e0 lista de express\u00f5es usadas no <em>CRIAR \u00cdNDICE<\/em> declara\u00e7\u00e3o. De fato, qualquer express\u00e3o suportada em um <em>CRIAR \u00cdNDICE<\/em> tamb\u00e9m pode ser usado como um termo em uma declara\u00e7\u00e3o <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> declara\u00e7\u00e3o. Por exemplo:<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR `travel-sample`.inventory.airport(city, country)\r\n\r\nANALYZE `travel-sample`.inventory.airport(city, country)<\/pre>\n<p>As declara\u00e7\u00f5es acima podem ser simplificadas se o <em>contexto de consulta<\/em> \u00e9 definido como <em>travel-sample.inventory:<\/em><\/p>\n<pre class=\"\">UPDATE STATISTICS FOR airport(city, country)\r\nANALYZE airport(city, country)<\/pre>\n<p><strong>Express\u00e3o de chave funcional<\/strong><\/p>\n<p>Semelhante \u00e0 especifica\u00e7\u00e3o de uma chave de \u00edndice funcional em um <em>CRIAR \u00cdNDICE<\/em> tamb\u00e9m \u00e9 poss\u00edvel especificar uma tecla de fun\u00e7\u00e3o em um comando <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> declara\u00e7\u00e3o. Por exemplo:<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR airport(lower(country))\r\n\r\nANALYZE airport(lower(country))<\/pre>\n<p><strong>Express\u00e3o de chave de matriz<\/strong><\/p>\n<p>Como especificar uma chave de \u00edndice de matriz em um <em>CRIAR \u00cdNDICE<\/em> tamb\u00e9m \u00e9 poss\u00edvel especificar uma chave de \u00edndice de matriz em uma instru\u00e7\u00e3o <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> declara\u00e7\u00e3o. Por exemplo:<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR route(DISTINCT ARRAY v.flight FOR v IN schedule END)\r\n\r\nANALYZE COLLECTION route(DISTINCT ARRAY v.flight FOR v IN schedule END)<\/pre>\n<p>ou usando a vers\u00e3o abreviada:<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR hotel(ALL public_likes)\r\n\r\nANALYZE KEYSPACE hotel(ALL public_likes)<\/pre>\n<p><strong>An\u00e1lise de um ou mais \u00edndices<\/strong><\/p>\n<p>Os comandos Analyze podem, opcionalmente, especificar um ou mais \u00edndices usando a op\u00e7\u00e3o <em>\u00cdNDICE<\/em> op\u00e7\u00e3o:<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR airport INDEX(def_inventory_airport_city, def_inventory_airport_faa)\r\n\r\nANALYZE airport INDEX(def_inventory_airport_city, def_inventory_airport_faa)<\/pre>\n<p>Quando o <em>\u00cdNDICE<\/em> for especificada, a lista de express\u00f5es de chave de \u00edndice para todos os \u00edndices ser\u00e1 usada como a lista de termos para a op\u00e7\u00e3o <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> declara\u00e7\u00e3o.<\/p>\n<p>Express\u00f5es no <em>ONDE<\/em> para um \u00edndice parcial tamb\u00e9m s\u00e3o adicionados aos termos para an\u00e1lise. Assim, a cl\u00e1usula <em>\u00cdNDICE<\/em> \u00e9 um atalho conveniente, pois o usu\u00e1rio n\u00e3o precisa listar todos os termos explicitamente.<\/p>\n<p>As declara\u00e7\u00f5es acima s\u00e3o equivalentes \u00e0s seguintes, pois cada \u00edndice tem apenas uma \u00fanica chave de \u00edndice e n\u00e3o h\u00e1 <em>ONDE<\/em> para qualquer \u00edndice referenciado:<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR airport(city, faa)\r\n\r\nANALYZE airport(city, faa)<\/pre>\n<p><strong>An\u00e1lise de todos os \u00edndices<\/strong><\/p>\n<p>Para ir al\u00e9m, voc\u00ea pode usar a op\u00e7\u00e3o INDEX ALL para uma instru\u00e7\u00e3o UPDATE STATISTICS\/ANALYZE, que considera todos os \u00edndices dispon\u00edveis definidos na cole\u00e7\u00e3o e que est\u00e3o em um estado on-line. Por exemplo:<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR airport INDEX ALL\r\n\r\nANALYZE airport INDEX ALL<\/pre>\n<p>Embora outras op\u00e7\u00f5es permitam que voc\u00ea especifique um nome de bucket ou um nome de cole\u00e7\u00e3o, a op\u00e7\u00e3o <em>INDEXAR TUDO<\/em> s\u00f3 \u00e9 v\u00e1lida para uma cole\u00e7\u00e3o. Especificando <em>INDEXAR TUDO<\/em> com um nome de bucket retornar\u00e1 um erro.<\/p>\n<h5>\u00cdndice de resid\u00eancia<\/h5>\n<p>A an\u00e1lise tamb\u00e9m atualiza as estat\u00edsticas do otimizador para os \u00edndices relevantes. Quando uma lista de termos \u00e9 especificada, a lista de \u00edndices aplic\u00e1vel \u00e9 constru\u00edda verificando as chaves de \u00edndice que fazem refer\u00eancia a qualquer termo da lista. As listas de \u00edndices relevantes s\u00e3o deduzidas dos \u00edndices quando o par\u00e2metro <em>\u00cdNDICE<\/em> ou <em>\u00cdNDICE AL<\/em>A op\u00e7\u00e3o L \u00e9 usada.<\/p>\n<p>As estat\u00edsticas do otimizador de um \u00edndice s\u00f3 podem ser coletadas quando o \u00edndice \u00e9, pelo menos parcialmente, residente na mem\u00f3ria. As estat\u00edsticas do otimizador s\u00e3o coletadas da parte residente na mem\u00f3ria de um \u00edndice. Uma propor\u00e7\u00e3o maior de residentes na mem\u00f3ria produz estat\u00edsticas de otimizador mais precisas para esse \u00edndice.<\/p>\n<p>Se um \u00edndice tiver uma propor\u00e7\u00e3o de zero residente na mem\u00f3ria, os avisos a seguir ser\u00e3o retornados pelo comando de otimiza\u00e7\u00e3o:<\/p>\n<pre class=\"\">\"warnings\": [\r\n{\r\n\"code\": 5390,\r\n\"msg\": \"Index def_inventory_airport_city is not in memory\"\r\n}\r\n],<\/pre>\n<h5>Cl\u00e1usula opcional WITH<\/h5>\n<p>Semelhante ao <em>CRIAR \u00cdNDICE<\/em> voc\u00ea tamb\u00e9m pode especificar uma instru\u00e7\u00e3o opcional <em>COM<\/em> para adicionar op\u00e7\u00f5es de an\u00e1lise estat\u00edstica. Por exemplo:<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR airport(city, country) WITH {\"resolution\": 0.5}\r\n\r\nANALYZE airport(city, country) WITH {\"resolution\": 0.5}<\/pre>\n<p>As seguintes op\u00e7\u00f5es s\u00e3o atualmente suportadas no <em>COM<\/em> cl\u00e1usula de um <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> declara\u00e7\u00e3o: <em>resolu\u00e7\u00e3o, sample_size, batch_size, update_statistics_timeout<\/em>. Cada um deles \u00e9 abordado a seguir.<\/p>\n<p><strong>A op\u00e7\u00e3o de resolu\u00e7\u00e3o<\/strong><\/p>\n<p>A estat\u00edstica de distribui\u00e7\u00e3o do termo (histograma) \u00e9 representada como uma s\u00e9rie de \"compartimentos\". A resolu\u00e7\u00e3o indica qual porcentagem de documentos est\u00e1 representada em cada compartimento. Por padr\u00e3o, \u00e9 usada uma resolu\u00e7\u00e3o de 1,0 (ou seja, 100 compartimentos).<\/p>\n<p>Voc\u00ea pode especificar uma resolu\u00e7\u00e3o diferente na cl\u00e1usula WITH. Por exemplo, se voc\u00ea precisar de uma granularidade mais fina das estat\u00edsticas de distribui\u00e7\u00e3o, poder\u00e1 especificar uma resolu\u00e7\u00e3o menor (correspondente a um n\u00famero maior de compartimentos).<\/p>\n<p>Observe que quanto menor a resolu\u00e7\u00e3o (maior n\u00famero de compartimentos), mais amostras s\u00e3o necess\u00e1rias para construir o histograma e mais tempo\/recursos s\u00e3o necess\u00e1rios para concluir o processo. <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> declara\u00e7\u00e3o.<\/p>\n<p>O intervalo v\u00e1lido da op\u00e7\u00e3o de resolu\u00e7\u00e3o \u00e9 de 0,02 a 5,0.<\/p>\n<p><strong>A op\u00e7\u00e3o sample_size<\/strong><\/p>\n<p>As amostras s\u00e3o necess\u00e1rias para construir as estat\u00edsticas de distribui\u00e7\u00e3o (histograma) para os termos especificados em um <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> declara\u00e7\u00e3o. A resolu\u00e7\u00e3o determina o tamanho da amostra e n\u00e3o est\u00e1 diretamente relacionada ao n\u00famero de documentos em uma cole\u00e7\u00e3o.<\/p>\n<p>Voc\u00ea pode especificar um tamanho de amostra a ser usado. No entanto, \u00e9 necess\u00e1rio um tamanho m\u00ednimo de amostra para uma determinada resolu\u00e7\u00e3o. Se o tamanho da amostra for menor do que o tamanho m\u00ednimo de amostra exigido, ser\u00e1 usado o tamanho m\u00ednimo de amostra exigido, e um aviso ser\u00e1 retornado.<\/p>\n<p><strong>A op\u00e7\u00e3o batch_size<\/strong><\/p>\n<p>A constru\u00e7\u00e3o de histogramas exige uma opera\u00e7\u00e3o de classifica\u00e7\u00e3o e, portanto, consome muitos recursos. Para evitar a utiliza\u00e7\u00e3o excessiva de recursos, os histogramas s\u00e3o constru\u00eddos em lotes. Por padr\u00e3o, cada lote processa at\u00e9 10 termos para a constru\u00e7\u00e3o do histograma. Se houver mais termos listados ou se a combina\u00e7\u00e3o das express\u00f5es de chave de \u00edndice (dos \u00edndices especificados pelas op\u00e7\u00f5es INDEX) exceder dez termos, ser\u00e3o necess\u00e1rios v\u00e1rios lotes para processar todos os termos.<\/p>\n<p>Voc\u00ea pode especificar um <em>tamanho_do_lote<\/em> para que o servidor saiba quantos termos devem ser processados em cada lote. Por exemplo, um usu\u00e1rio pode solicitar um tamanho de lote maior se o sistema n\u00e3o estiver ocupado e houver muitos recursos de computa\u00e7\u00e3o dispon\u00edveis. Por outro lado, se o sistema j\u00e1 estiver sobrecarregado, um tamanho de lote menor poder\u00e1 ser usado. \u00c9 um equil\u00edbrio entre o uso de recursos e a dura\u00e7\u00e3o da instru\u00e7\u00e3o de an\u00e1lise.<\/p>\n<p><strong>A op\u00e7\u00e3o update_statistics_timeout<\/strong><\/p>\n<p>O <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> \u00e9 uma tarefa de manuten\u00e7\u00e3o e pode fazer com que o tempo de resposta seja significativamente maior do que o de uma simples consulta, especialmente quando s\u00e3o necess\u00e1rios v\u00e1rios lotes.<\/p>\n<p>Um valor de tempo limite de 60 segundos \u00e9 aplicado a um comando update\/analyze por padr\u00e3o. \u00c9 poss\u00edvel especificar um valor opcional (em segundos) para o valor de tempo limite. Observe que o valor de tempo limite se aplica a cada lote quando s\u00e3o necess\u00e1rios v\u00e1rios lotes.<\/p>\n<h5>Cl\u00e1usula DELETE<\/h5>\n<p>Os usu\u00e1rios podem descartar as estat\u00edsticas atuais do otimizador usando um <em>DELETE<\/em> com a instru\u00e7\u00e3o update\/analyze. Essa cl\u00e1usula desativa seletivamente o CBO para uma consulta ou conjunto de consultas.<\/p>\n<p>H\u00e1 algumas maneiras de especificar o <em>DELETE<\/em> especificando uma lista de termos para os quais as estat\u00edsticas do otimizador ser\u00e3o exclu\u00eddas ou solicitando a exclus\u00e3o de todas as estat\u00edsticas do otimizador de um espa\u00e7o-chave\/cole\u00e7\u00e3o.<\/p>\n<p>Cl\u00e1usula DELETE com uma lista de termos<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR airport DELETE (city, country)\r\n\r\nANALYZE COLLECTION airport DELETE STATISTICS(city, country)<\/pre>\n<p>A consulta excluir\u00e1 as estat\u00edsticas de distribui\u00e7\u00e3o somente para os termos especificados com essa op\u00e7\u00e3o. Outras estat\u00edsticas do otimizador, como espa\u00e7o-chave e estat\u00edsticas de \u00edndice, n\u00e3o ser\u00e3o afetadas. Com essa op\u00e7\u00e3o, se uma consulta tiver um predicado no campo \"city\" ou \"country\" da cole\u00e7\u00e3o \"airport\", o CBO ser\u00e1 desativado para a consulta.<\/p>\n<p>Cl\u00e1usula DELETE para todas as estat\u00edsticas do otimizador de um espa\u00e7o-chave\/cole\u00e7\u00e3o<\/p>\n<pre class=\"\">UPDATE STATISTICS FOR airport DELETE ALL\r\n\r\nANALYZE KEYSPACE airport DELETE STATISTICS<\/pre>\n<p>Com essa op\u00e7\u00e3o, todas as estat\u00edsticas do otimizador para a cole\u00e7\u00e3o \"airport\" ser\u00e3o exclu\u00eddas, incluindo estat\u00edsticas de espa\u00e7o-chave, estat\u00edsticas de \u00edndice e estat\u00edsticas de distribui\u00e7\u00e3o. Qualquer consulta que fa\u00e7a refer\u00eancia \u00e0 cole\u00e7\u00e3o \"airport\" ter\u00e1 o CBO desativado nesse caso.<\/p>\n<h5>Quais campos\/express\u00f5es devem ser analisados?<\/h5>\n<p>Como posso saber quais campos\/express\u00f5es devo incluir em um <em>ATUALIZAR ESTAT\u00cdSTICAS\/ANALISAR<\/em> declara\u00e7\u00e3o? Como regra geral, qualquer express\u00e3o referenciada em uma consulta (exceto aquelas apenas na cl\u00e1usula de proje\u00e7\u00e3o) requer estat\u00edsticas do otimizador.<\/p>\n<p>Cl\u00e1usulas WHERE, ON, GROUP BY, ORDER BY<\/p>\n<p>Express\u00f5es referenciadas no <em>ONDE, EM, GRUPO POR<\/em> e <em>ORDER BY<\/em> exigem estat\u00edsticas do otimizador. Por exemplo:<\/p>\n<pre class=\"\">SELECT a.airportname, r.airline\r\nFROM airport a JOIN route r ON a.faa = r.sourceairport\r\nWHERE a.city = \"San Francisco\"\r\nORDER BY a.airportname;<\/pre>\n<p>Para essa consulta, as estat\u00edsticas do otimizador s\u00e3o necess\u00e1rias:<\/p>\n<pre class=\"\">airport(faa, city, airportname)\r\nroute(sourceairport)<\/pre>\n<p>Se for usada uma express\u00e3o mais complexa:<\/p>\n<pre class=\"\">SELECT *\r\nFROM airport\r\nWHERE lower(country) = \"us\";<\/pre>\n<p>Para essa consulta, as estat\u00edsticas do otimizador s\u00e3o necess\u00e1rias:<\/p>\n<pre class=\"\">airport(lower(country))<\/pre>\n<p><strong>Express\u00f5es de \u00edndice de matriz<\/strong><\/p>\n<p>Para <em>QUALQUER<\/em> ou <em>QUALQUER E TODOS<\/em> que utilizam \u00edndices de matriz, s\u00e3o necess\u00e1rias estat\u00edsticas do otimizador para a express\u00e3o de chave de \u00edndice de matriz correspondente. Por exemplo:<\/p>\n<pre class=\"\">SELECT *\r\nFROM route\r\nWHERE ANY v IN schedule SATISFIES v.flight = \"FL121\" END;<\/pre>\n<p>Para essa consulta, as estat\u00edsticas do otimizador s\u00e3o necess\u00e1rias:<\/p>\n<pre class=\"\">route(DISTINCT ARRAY v.flight FOR v IN schedule END)<\/pre>\n<p>Observe que a express\u00e3o usada \u00e9 a mesma que a express\u00e3o da chave do \u00edndice da matriz para a defini\u00e7\u00e3o do \u00edndice da matriz correspondente.<\/p>\n<p>Para um <em>IN\u00daTIL<\/em> opera\u00e7\u00e3o:<\/p>\n<pre class=\"\">SELECT r.destinationairport\r\nFROM route r UNNEST r.schedule AS s\r\nWHERE s.flight = \"FL121\";<\/pre>\n<p>Para essa consulta, as estat\u00edsticas do otimizador s\u00e3o necess\u00e1rias:<\/p>\n<pre class=\"\">route(ALL ARRAY v.flight FOR v IN schedule END)<\/pre>\n<p>Novamente, a express\u00e3o usada \u00e9 a mesma que a express\u00e3o da chave de \u00edndice de matriz para a defini\u00e7\u00e3o de \u00edndice de matriz correspondente.<\/p>\n<p><strong>Subconsulta e express\u00e3o de tabela comum (CTE)<\/strong><\/p>\n<p>Para uma consulta que envolva uma subconsulta ou um CTE, examine o bloco de consulta da subconsulta ou do CTE para determinar quais express\u00f5es exigem estat\u00edsticas do otimizador:<\/p>\n<pre class=\"\">WITH usairport AS (SELECT airportname, faa\r\nFROM airport\r\nWHERE lower(country) = \"us\")\r\nSELECT * FROM usairport;<\/pre>\n<p>Observando o bloco de consulta que define o CTE, as estat\u00edsticas do otimizador s\u00e3o necess\u00e1rias:<\/p>\n<pre class=\"\">airport(lower(country))<\/pre>\n<p><strong>Fun\u00e7\u00f5es da janela<\/strong><\/p>\n<p>Se for usada uma fun\u00e7\u00e3o de janela, ser\u00e3o necess\u00e1rias estat\u00edsticas do otimizador nas express\u00f5es usadas nas cl\u00e1usulas PARTITION BY e ORDER BY:<\/p>\n<pre class=\"\">SELECT COUNT(1) OVER (PARTITION BY country)\r\nFROM airline;<\/pre>\n<p>Para essa consulta, as estat\u00edsticas do otimizador s\u00e3o necess\u00e1rias:<\/p>\n<pre class=\"\">airline(country)<\/pre>\n<h5><span style=\"font-weight: 400\">Exibir estat\u00edsticas do otimizador<\/span><\/h5>\n<p>H\u00e1 dois novos espa\u00e7os de chave do sistema introduzidos para as estat\u00edsticas do otimizador: system:dictionary e system:dictionary_cache. O primeiro corresponde aos documentos em disco armazenados em <em>N1QL_SYSTEM_BUCKET.N1QL_SYSTEM_SCOPE.N1QL_CBO_STATS,<\/em> enquanto o system:dictionary_cache corresponde \u00e0 representa\u00e7\u00e3o em cache na mem\u00f3ria de um subconjunto das mesmas informa\u00e7\u00f5es.<\/p>\n<p>O cache do dicion\u00e1rio \u00e9 inicializado quando um n\u00f3 de consulta \u00e9 iniciado, e as informa\u00e7\u00f5es do cache s\u00e3o preenchidas durante a execu\u00e7\u00e3o das consultas. Os dados recuperados do <em>sistema:dicion\u00e1rio<\/em> ser\u00e1 o mesmo, independentemente do n\u00f3 de consulta que obtiver as informa\u00e7\u00f5es ao usar v\u00e1rios n\u00f3s de consulta.<\/p>\n<p>No entanto, as informa\u00e7\u00f5es armazenadas em cache de todos os n\u00f3s de consulta em um cluster de v\u00e1rios n\u00f3s estar\u00e3o em <em>system:dictionary_cache,<\/em> em que cada n\u00f3 pode ter um subconjunto diferente de informa\u00e7\u00f5es armazenadas em cache.<\/p>\n<p>Essa consulta mostra a estat\u00edstica em system:dictionary:<\/p>\n<pre class=\"\">SELECT * FROM system:dictionary\r\nWHERE `bucket` = \"travel-sample\" AND `scope` = \"inventory\"\r\nAND `keyspace` = \"airport\";<\/pre>\n<p>Os resultados da consulta s\u00e3o:<\/p>\n<pre class=\"\">{\r\n\"dictionary\": {\r\n\"avgDocKeySize\": 12,\r\n\"avgDocSize\": 278,\r\n\"bucket\": \"travel-sample\",\r\n\"distributionKeys\": [\r\n\"country\",\r\n\"lower(country)\"\r\n],\r\n\"docCount\": 1968,\r\n\"indexes\": [\r\n{\r\n\"indexId\": \"4978a27d62bc592a\",\r\n\"indexName\": \"def_inventory_airport_primary\",\r\n\"indexStats\": [\r\n{\r\n\"avgItemSize\": 23,\r\n\"avgPageSize\": 7202,\r\n\"numItems\": 1968,\r\n\"numPages\": 6,\r\n\"resRatio\": 1\r\n}\r\n]\r\n},\r\n{\r\n\"indexId\": \"c5071b3ac2730bff\",\r\n\"indexName\": \"def_inventory_airport_faa\",\r\n\"indexStats\": [\r\n{\r\n\"avgItemSize\": 32,\r\n\"avgPageSize\": 9394,\r\n\"numItems\": 1968,\r\n\"numPages\": 7,\r\n\"resRatio\": 1\r\n}\r\n]\r\n},\r\n{\r\n\"indexId\": \"e260327a9933350e\",\r\n\"indexName\": \"def_inventory_airport_city\",\r\n\"indexStats\": [\r\n{\r\n\"avgItemSize\": 39,\r\n\"avgPageSize\": 11410,\r\n\"numItems\": 1968,\r\n\"numPages\": 7,\r\n\"resRatio\": 1\r\n}\r\n]\r\n}\r\n],\r\n\"keyspace\": \"airport\",\r\n\"namespace\": \"default\",\r\n\"scope\": \"inventory\"\r\n}\r\n}<\/pre>\n<p>Cada entrada cont\u00e9m informa\u00e7\u00f5es b\u00e1sicas sobre o espa\u00e7o-chave, uma matriz de <em>distributionKeys<\/em> para os quais os histogramas est\u00e3o dispon\u00edveis e uma matriz de informa\u00e7\u00f5es de \u00edndice.<\/p>\n<p>Da mesma forma, ao consultar o system:dictionary_cache:<\/p>\n<pre class=\"\">SELECT * FROM system:dictionary_cache\r\nWHERE `bucket` = \"travel-sample\" AND `scope` = \"inventory\"\r\nAND `keyspace` = \"airport\";<\/pre>\n<p>O resultado \u00e9 o mesmo que o <em>sistema:dicion\u00e1rio<\/em> exceto por um campo de n\u00f3 extra que mostra entradas de diferentes n\u00f3s de consulta.<\/p>\n<h5>Explicar a sa\u00edda com optimizer_estimates<\/h5>\n<p>Quando as estat\u00edsticas apropriadas do otimizador estiverem dispon\u00edveis, a sa\u00edda do EXPLAIN conter\u00e1 uma nova se\u00e7\u00e3o optimizer_estimates para cada operador. Essas se\u00e7\u00f5es refletem a estimativa do otimizador para as informa\u00e7\u00f5es de custo desse operador e de todos os seus filhos. Por exemplo:<\/p>\n<pre class=\"\">EXPLAIN SELECT * FROM airport WHERE city = \"San Francisco\";<\/pre>\n<p>A sa\u00edda a seguir \u00e9 para o operador IndexScan3:<\/p>\n<pre class=\"\">{\r\n\"#operator\": \"IndexScan3\",\r\n\"index\": \"airpot_city_country\",\r\n\u2026\u2026\r\n\"optimizer_estimates\": {\r\n\"cardinality\": 1.1764705882352944,\r\n\"cost\": 12.212415941159103,\r\n\"fr_cost\": 12.180553549985238,\r\n\"size\": 12\r\n},\r\n\"spans\": [\r\n\u2026\u2026\r\n],\r\n\u2026\u2026\r\n},<\/pre>\n<p>Ter o <em>otimizador_estimativas<\/em> para um operador \u00e9 uma indica\u00e7\u00e3o de que o banco de dados est\u00e1 usando o CBO para esse est\u00e1gio do processo de planejamento da consulta.<\/p>\n<h4>Resumo<\/h4>\n<p>Novos recursos inovadores de banco de dados foram disponibilizados no Couchbase 7.0; a adi\u00e7\u00e3o do Cost-Based Optimizer (CBO) \u00e9 apenas um dos muitos. As consultas de atualiza\u00e7\u00e3o\/an\u00e1lise mostradas nesta postagem do blog s\u00e3o essenciais para coletar as estat\u00edsticas necess\u00e1rias para que o CBO funcione com efici\u00eancia.<\/p>\n<p>Quando o banco de dados re\u00fane estat\u00edsticas precisas do otimizador, a sa\u00edda EXPLAIN mostra as estimativas que o CBO usar\u00e1 para escolher um plano de consulta. Isso ajudar\u00e1 a orient\u00e1-lo para uma gera\u00e7\u00e3o de consultas mais eficiente e previs\u00edvel no futuro.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Leia mais sobre o CBO na se\u00e7\u00e3o <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/cost-based-optimizer.html\"><span style=\"font-weight: 400\">Documentos do Couchbase<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Leia mais sobre o <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/introduction\/whats-new.html\"><span style=\"font-weight: 400\">Lan\u00e7amento do Couchbase 7 e seus novos recursos<\/span><\/a><\/li>\n<li style=\"font-weight: 400\">Mergulhe no SQL para JSON: <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/query.html\">Linguagem de consulta SQL++<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Couchbase Server 7.0 (Enterprise Edition) introduced a Cost-Based Optimizer (CBO). Previous versions of Couchbase Server used a Rule-Based Optimizer (RBO). Couchbase Server has naturally evolved from RBO to CBO like most major relational database systems. The CBO uses cost estimates [&hellip;]<\/p>","protected":false},"author":3021,"featured_media":12716,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2294,1816,1812],"tags":[8562,8907,1261],"ppma_author":[9065],"class_list":["post-12715","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","category-couchbase-server","category-n1ql-query","tag-cost-based-optimization","tag-couchbase-server-7-0","tag-json"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0 - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"In this blog post you will learn how to analyzeStatistics for Cost-Based Optimization in Couchbase Server 7.0\" \/>\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.couchbase.com\/blog\/pt\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0\" \/>\n<meta property=\"og:description\" content=\"In this blog post you will learn how to analyzeStatistics for Cost-Based Optimization in Couchbase Server 7.0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-25T21:41:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:26:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1829\" \/>\n\t<meta property=\"og:image:height\" content=\"2560\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Bingjie Miao, Principal Software Engineer Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bingjie Miao, Principal Software Engineer Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/\"},\"author\":{\"name\":\"Bingjie Miao, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3a65595a167e56276aec1f708072c2e6\"},\"headline\":\"Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0\",\"datePublished\":\"2022-01-25T21:41:03+00:00\",\"dateModified\":\"2025-06-14T02:26:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/\"},\"wordCount\":2146,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg\",\"keywords\":[\"Cost Based Optimization\",\"Couchbase Server 7.0\",\"JSON\"],\"articleSection\":[\"Couchbase Analytics\",\"Couchbase Server\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/\",\"name\":\"Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg\",\"datePublished\":\"2022-01-25T21:41:03+00:00\",\"dateModified\":\"2025-06-14T02:26:34+00:00\",\"description\":\"In this blog post you will learn how to analyzeStatistics for Cost-Based Optimization in Couchbase Server 7.0\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg\",\"width\":1829,\"height\":2560,\"caption\":\"Guide to Vector Search\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3a65595a167e56276aec1f708072c2e6\",\"name\":\"Bingjie Miao, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8834c93ec327fc373f7cf1896138b95b\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g\",\"caption\":\"Bingjie Miao, Senior Software Engineer, Couchbase\"},\"description\":\"Bingjie Miao is a principal software engineer at Couchbase. Bingjie has 20 years of experience in relational and NoSQL databases. His main area of expertise is query optimization and query execution.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/bingjie-miaocouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0 - The Couchbase Blog","description":"Nesta postagem do blog, voc\u00ea aprender\u00e1 a analisarStatistics para otimiza\u00e7\u00e3o baseada em custo no Couchbase Server 7.0","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.couchbase.com\/blog\/pt\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/","og_locale":"pt_BR","og_type":"article","og_title":"Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0","og_description":"In this blog post you will learn how to analyzeStatistics for Cost-Based Optimization in Couchbase Server 7.0","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/","og_site_name":"The Couchbase Blog","article_published_time":"2022-01-25T21:41:03+00:00","article_modified_time":"2025-06-14T02:26:34+00:00","og_image":[{"width":1829,"height":2560,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Bingjie Miao, Principal Software Engineer Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bingjie Miao, Principal Software Engineer Couchbase","Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/"},"author":{"name":"Bingjie Miao, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3a65595a167e56276aec1f708072c2e6"},"headline":"Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0","datePublished":"2022-01-25T21:41:03+00:00","dateModified":"2025-06-14T02:26:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/"},"wordCount":2146,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg","keywords":["Cost Based Optimization","Couchbase Server 7.0","JSON"],"articleSection":["Couchbase Analytics","Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/","url":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/","name":"Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg","datePublished":"2022-01-25T21:41:03+00:00","dateModified":"2025-06-14T02:26:34+00:00","description":"Nesta postagem do blog, voc\u00ea aprender\u00e1 a analisarStatistics para otimiza\u00e7\u00e3o baseada em custo no Couchbase Server 7.0","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/01\/alex-rodriguez-santibanez-AIvKJfwMcd8-unsplash-scaled.jpg","width":1829,"height":2560,"caption":"Guide to Vector Search"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/analyzing-statistics-for-cost-based-optimization-in-couchbase-7-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Analyzing Statistics for Cost-Based Optimization in Couchbase 7.0"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3a65595a167e56276aec1f708072c2e6","name":"Bingjie Miao, engenheiro de software s\u00eanior, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8834c93ec327fc373f7cf1896138b95b","url":"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g","caption":"Bingjie Miao, Senior Software Engineer, Couchbase"},"description":"Bingjie Miao \u00e9 engenheiro de software principal da Couchbase. Bingjie tem 20 anos de experi\u00eancia em bancos de dados relacionais e NoSQL. Sua principal \u00e1rea de especializa\u00e7\u00e3o \u00e9 a otimiza\u00e7\u00e3o e execu\u00e7\u00e3o de consultas.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/bingjie-miaocouchbase-com\/"}]}},"authors":[{"term_id":9065,"user_id":3021,"is_guest":0,"slug":"bingjie-miaocouchbase-com","display_name":"Bingjie Miao, Principal Software Engineer Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g","author_category":"","last_name":"Miao, Principal Software Engineer, Couchbase","first_name":"Bingjie","job_title":"","user_url":"","description":"Bingjie Miao \u00e9 engenheiro de software principal da Couchbase. Bingjie tem 20 anos de experi\u00eancia em bancos de dados relacionais e NoSQL. Sua principal \u00e1rea de especializa\u00e7\u00e3o \u00e9 a otimiza\u00e7\u00e3o e execu\u00e7\u00e3o de consultas."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/12715","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/3021"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=12715"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/12715\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/12716"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=12715"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=12715"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=12715"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=12715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}