sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué el tiempo de ejecución del procedimiento almacenado de Oracle aumenta considerablemente dependiendo de cómo se ejecute?

Intente obtener parámetros nls de sus diferentes casos (programas ide o java), deben ser diferentes

select * from NLS_SESSION_PARAMETERS

Luego, dentro del procedimiento de su tienda, configure las variables para que sean iguales desde el caso más rápido.

  execute immediate 'alter session set NLS_SORT=''SPANISH''';

Una vez que SP tenga todos los parámetros nls. Correrá rápido.

Recientemente encontré un caso similar en Alter session que ralentiza la consulta a través de Hibernate. pero en su caso cambiaron de parámetros y luego se ralentizaron.

Investigué y descubrí que los parámetros NLS_COMP y NLS_SORT pueden afectar la forma en que Oracle hace uso del plan de ejecución para cadenas (cuando está comparando u ordenando)

Cuando NLS_COMP se define como LINGUISTIC, utilizará el idioma definido en NLS_SORT.

por ejemplo, si NLS_COMP =LINGUISTIC y NLS_SORT=BINARI_AI su consulta es

select * from table where string_column like 'HI%'

internamente servirá

select * from table where  
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('324242432')
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('675757576')

por lo tanto, si no tiene un índice para NLSSORT (columna, 'BINARI_AI'), será muy lento.

sabiendo que NLS_SORT=BINARY_AI hará que sus pedidos y comparaciones no distingan acentos ni mayúsculas y minúsculas.