Este é o nosso lançamento de fevereiro para Serviço de consultor de índices depois de corrigir alguns dos erros encontrados. Planejamos continuar melhorando o serviço Index Advisor(O que é isso?). As correções no Index Advisor que você normalmente veria na próxima versão de manutenção agora estarão disponíveis para você todos os meses.
Para quem ele serve? e Quando você deve usá-lo?
https://index-advisor.couchbase.com/
Ao custo de me repetir,
Esse serviço fornecerá recomendações de índices para ajudar DBAs, desenvolvedores e arquitetos a otimizar o desempenho das consultas e atender aos SLAs.
Esse serviço será útil se você:
- Deseja evitar a leitura do criação de índices regrasCompreendê-los e implementá-los para encontrar os índices apropriados para sua consulta/consultas/carga de trabalho.
- Ainda não deseja fazer o download do servidor Couchbase 6.5 mais recente.
- Está usando um versão mais antiga do Couchbase (versão 5.5, 6.0) e precisa de ajuda para criar os índices certos para suas consultas.
- Deseja gerar conselhos para índices sem criar um bucket ou fazer upload do esquema ou dos dados.
O que há de novo?
Mesmo que você tenha feito o download do servidor Couchbase Server 6.5 e possa usar o Index Advisor do Query Workbench, esse Index Advisor é uma versão mais recente (sem uma interface de usuário de ótima aparência), mas com os seguintes defeitos corrigidos.
1. Aviso de índice no espaço de chave virtual
2. Index Advisor para dar suporte ao espaço de chave virtual para instruções de exclusão/fusão/atualização
Com essas duas correções, uma consulta como
|
1 |
advise delete FROM aa where type="beer" ; |
que costumava dar
|
1 2 3 4 5 6 7 8 9 10 |
<span style="color: #ff0000">[ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": [] }, "query": "delete FROM aa where type=\"beer\" ;" } ]</span> |
agora dá
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "results": [ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes": { "covering_indexes": [ { "index_statement": "CREATE INDEX adv_type ON `aa`(`type`)", "keyspace_alias": "aa" } ], "indexes": [ { "index_statement": "CREATE INDEX adv_type ON `aa`(`type`)", "keyspace_alias": "aa", "recommending_rule": "Index keys follow order of predicate types: 2. equality/null/missing." } ] } } }, "query": "delete FROM aa where type=\"beer\" ;" } ] } |
3. Index Advisor para remover o identificador na expressão Meta()
Para uma consulta como:
|
1 |
SELECT * FROM `beer-sample` d where SPLIT(meta(d).id, ":")[0] like "%cafe" |
obteríamos
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span style="color: #ff0000">{ "adviseResult": [ { "current_indexes": [ { "index_statement": "CREATE PRIMARY INDEX beer_primary ON `beer-sample`", "keyspace_alias": "beer-sample_d" } ], "recommended_indexes": { "indexes": [ { "index_statement": "CREATE INDEX adv_split_meta_d_id_0 ON `beer-sample`(split((meta(`d`).`id`), ':')[0])", "keyspace_alias": "beer-sample_d", "recommending_rule": "Index keys follow order of predicate types: 9. function index." } ] } } ] }</span> |
Agora modificamos isso para:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "results": [ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes": { "indexes": [ { "index_statement": "CREATE INDEX adv_split_meta_self_id_0 ON `beer-sample`(split((<span style="color: #3366ff">meta(`self`)</span>.`id`), ':')[0])", "keyspace_alias": "beer-sample_d", "recommending_rule": "Index keys follow order of predicate types: 9. like." } ] } } }, "query": "SELECT * FROM `beer-sample` d where SPLIT(meta(d).id, \":\")[0] like \"%cafe\"" } ] } |
para melhor utilização.
4. Consulta: Aconselhar função de mensagem confusa
Várias mensagens de erro confusas foram substituídas por explicações mais detalhadas e claras.
5. O uso de advise em uma consulta que tem a palavra-chave USE index retorna um erro incorreto
|
1 |
advise select id,url,address,title,city,name,country,public_likes from bucket0 <strong>use index (def_primary)</strong> where some p in public_likes satisfies p like "Ge%" END AND type = "hotel" order by id, url, address, title, city DESC, name, country |
usado para dar
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span style="color: #ff0000">[ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": [ { "recommended_indexes": "No index recommendation at this time: no keyspace found." } ] }, "query": "select id,url,address,title,city,name,country,public_likes from bucket0 use index (def_primary) where some p in public_likes satisfies p like \"Ge%\" END AND type = \"hotel\" order by id, url, address, title, city DESC, name, country" } ]</span> |
agora dá
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "results": [ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes": { "covering_indexes": [ { "index_statement": "CREATE INDEX adv_type_DISTINCT_public_likes_id_url_city_name_title_address_country_public_likes ON `bucket0`(`type`,DISTINCT ARRAY `p` FOR p in `public_likes` END,`id`,`url`,`city`,`name`,`title`,`address`,`country`,`public_likes`)", "keyspace_alias": "bucket0" } ], "indexes": [ { "index_statement": "CREATE INDEX adv_type_DISTINCT_public_likes ON `bucket0`(`type`,DISTINCT ARRAY `p` FOR p in `public_likes` END)", "keyspace_alias": "bucket0", "recommending_rule": "Index keys follow order of predicate types: 2. equality/null/missing, 6. array predicate." } ] } } }, "query": "select id,url,address,title,city,name,country,public_likes from bucket0 use index (def_primary) where some p in public_likes satisfies p like \"Ge%\" END AND type = \"hotel\" order by id, url, address, title, city DESC, name, country" } ] } |
Também foram adicionados mais alguns aprimoramentos menores.
Experimente e, se tiver algum problema com os índices recomendados pelo Index Advisor Service, você pode adicioná-lo como um comentário a este blog
Mais informações sobre o recurso Index Advisor:
https://www.couchbase.com/blog/index-advisor-service/
https://www.couchbase.com/blog/n1ql-index-advisor-improve-query-performance-and-productivity/
https://www.couchbase.com/blog/index-advisor-for-query-workload/
https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/advise.html
https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/advisor.html
https://docs.couchbase.com/server/6.5/tools/query-workbench.html#index-advisor