Optimiseur et les statistiques

Dans Couchbase Server Enterprise Edition, l'optimiseur basé sur les coûts permet au service de requête de créer le plan le plus efficace pour exécuter une requête. L'optimiseur basé sur les coûts analyse les statistiques de keyspace, les statistiques d'index et les statistiques de distribution pour sélectionner les index optimaux et créer le plan d'exécution de la requête.

Calculer les statistiques pour des champs

cbq> UPDATE STATISTICS FOR `ecole-bucket`.`ecole-scope`.etudiant(nom, prenom, region, ville);
{
    "requestID": "33902b1b-5d77-4302-8c95-1102de2b8224",
    "signature": null,
    "results": [
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "7.096286249s",
        "executionTime": "7.096160152s",
        "resultCount": 0,
        "resultSize": 0,
        "serviceLoad": 12
    }
}

Calculer les statistiques pour des index

cbq> UPDATE STATISTICS FOR INDEX default:`ecole-bucket`.`ecole-scope`.etudiant.etudiant_idx1;
{
    "requestID": "4b8d1790-e6d0-403d-a2ee-9fdea7c60f85",
    "signature": null,
    "results": [
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "192.491457ms",
        "executionTime": "192.34633ms",
        "resultCount": 0,
        "resultSize": 0,
        "serviceLoad": 12
    }
}

Calculer les statistiques pour plusieurs index

cbq> UPDATE STATISTICS FOR `ecole-bucket`.`ecole-scope`.etudiant INDEX (etudiant_idx2, etudiant_idx3);
{
    "requestID": "ac0be9f7-cf83-4ac8-89dd-af40c3e70188",
    "signature": null,
    "results": [
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "195.260917ms",
        "executionTime": "195.198902ms",
        "resultCount": 0,
        "resultSize": 0,
        "serviceLoad": 12
    }
}

Calculer les statistiques pour tous les index

cbq> UPDATE STATISTICS FOR `ecole-bucket`.`ecole-scope`.etudiant INDEX ALL;
{
    "requestID": "2ea367c9-26c5-4f3e-ac75-9497602a9fec",
    "signature": null,
    "results": [
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "291.399445ms",
        "executionTime": "291.304625ms",
        "resultCount": 0,
        "resultSize": 0,
        "serviceLoad": 12
    }
}

Supprimer les statistiques pour des champs

cbq> UPDATE STATISTICS FOR `ecole-bucket`.`ecole-scope`.etudiant DELETE (nom, prenom, region, ville);
{
    "requestID": "35493bba-464f-4b83-b00c-3783e6a831aa",
    "signature": null,
    "results": [
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "79.609165ms",
        "executionTime": "79.529055ms",
        "resultCount": 0,
        "resultSize": 0,
        "serviceLoad": 12
    }
}

Supprimer les statistiques pour tous les index

cbq> UPDATE STATISTICS FOR `ecole-bucket`.`ecole-scope`.etudiant DELETE ALL;
{
    "requestID": "102bec48-112a-4d65-8081-702edde59b50",
    "signature": null,
    "results": [
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "88.716801ms",
        "executionTime": "88.65375ms",
        "resultCount": 0,
        "resultSize": 0,
        "serviceLoad": 12
    }
}

Tips pour optimiser les perormances des requêtes analytiques

Définir le paralélisme d'exécution

SET `compiler.parallelism` "8";

Définir la taille mémoire pour les requêtes GROUP BY

SET `compiler.groupmemory` "64MB"; 

Définir la taille mémoire pour les tri

SET `compiler.sortmemory` "67108864";

Définir la taille mémoire pour les jointures

SET `compiler.joinmemory` "132000KB";