sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Por qué el umbral de declaraciones preparadas de JDBC de PostgreSQL está predeterminado en 5?

Las declaraciones preparadas del lado del servidor consumen recursos del lado del servidor para almacenar el plan de ejecución de la declaración. El umbral proporciona una heurística que hace que se preparen declaraciones que realmente se usan "a menudo". La definición de "a menudo" por defecto es 5.

Tenga en cuenta que las declaraciones preparadas del lado del servidor pueden causar planes de ejecución deficientes porque no se basan en los parámetros pasados ​​durante la preparación. Si los parámetros pasados ​​a una declaración preparada tienen una selectividad diferente en un índice particular (por ejemplo), entonces el plan de consulta general de la declaración preparada puede ser subóptimo. Como otro ejemplo, si tiene una situación en la que la ejecución de la consulta es mucho mayor que el costo de crear un plan de explicación, y el plan de explicación no está configurado correctamente debido a la falta de parámetros de vinculación, es mejor que no use declaraciones preparadas del lado del servidor.

Cuando el conductor alcance el umbral, preparará la declaración de la siguiente manera:

    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());
    }

El nombre de la declaración se envía como parte del protocolo de conexión, que le dice a Postgres que lo prepare del lado del servidor.