PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi le seuil d'instruction préparée PostgreSQL JDBC est-il défini par défaut sur 5 ?

Les instructions préparées côté serveur consomment des ressources côté serveur pour stocker le plan d'exécution de l'instruction. Le seuil fournit une heuristique qui entraîne la préparation d'instructions réellement utilisées "souvent". La définition de "souvent" par défaut est 5.

Notez que les instructions préparées côté serveur peuvent entraîner des plans d'exécution médiocres car elles ne sont pas basées sur les paramètres transmis lors de la préparation. Si les paramètres passés à une instruction préparée ont une sélectivité différente sur un index particulier (par exemple), le plan de requête général de l'instruction préparée peut être sous-optimal. Comme autre exemple, si vous avez une situation où l'exécution de la requête est bien supérieure au coût de création d'un plan d'exécution et que le plan d'exécution n'est pas correctement défini en raison d'un manque de paramètres de liaison, vous feriez peut-être mieux de ne pas utiliser instructions préparées côté serveur.

Lorsque le conducteur atteint le seuil, il préparera la déclaration comme suit :

    if (!oneShot)
    {
        // Generate a statement name to use.
        statementName = "S_" + (nextUniqueID++);

        // And prepare the new statement.
        // NB: Must clone the OID array, as it's a direct reference to
        // the SimpleParameterList's internal array that might be modified
        // under us.
        query.setStatementName(statementName);
        query.setStatementTypes((int[])typeOIDs.clone());
    }

Le nom de la déclaration est envoyé dans le cadre du protocole filaire, qui indique à Postgres de le préparer côté serveur.