PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego próg przygotowanych instrukcji PostgreSQL JDBC jest domyślnie ustawiony na 5?

Przygotowane instrukcje po stronie serwera zużywają zasoby po stronie serwera do przechowywania planu wykonania instrukcji. Próg zapewnia heurystykę, która powoduje, że instrukcje, które są faktycznie używane „często” są przygotowywane. Definicja „często” to domyślnie 5.

Należy zauważyć, że przygotowane instrukcje po stronie serwera mogą powodować słabe plany wykonania, ponieważ nie są oparte na parametrach przekazanych podczas przygotowania. Jeżeli parametry przekazane do przygotowanej instrukcji mają różną selektywność na konkretnym indeksie (na przykład), to ogólny plan zapytań przygotowanej instrukcji może być nieoptymalny. Jako inny przykład, jeśli masz sytuację, w której wykonanie zapytania jest znacznie większe niż koszt utworzenia planu wyjaśniania, a plan wyjaśniania nie jest prawidłowo ustawiony z powodu braku parametrów powiązania, lepiej nie używać wyciągi przygotowane po stronie serwera.

Gdy kierowca osiągnie próg, przygotuje oświadczenie w następujący sposób:

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

Nazwa instrukcji jest wysyłana jako część protokołu wire, który mówi Postgresowi, aby przygotował ją po stronie serwera.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL CASE ... END z wieloma warunkami

  2. Błąd podczas tworzenia bazy danych PostgreSQL przy użyciu Pythona, sqlalchemy i psycopg2

  3. Jak używać pakietu graphql-type-json z GraphQl

  4. Odśwież widoki zmaterializowane:Współbieżność, zachowanie transakcyjne

  5. Datagrip Nie można zastosować zmian Ta tabela jest tylko do odczytu. Nie można zastosować zmian w edytorze komórek