Los siguientes son los valores de las variables de enlace consultadas. Puede ver el valor real de una variable mirando la vista v$SQL_bind_capture. Si el tiempo es muy largo, puede utilizar la siguiente declaración para ver la información histórica de la variable de enlace.
La siguiente es una ejecución manual del seguimiento con la opción de seguimiento automático activada. No hay ningún problema en términos de eficiencia de ejecución.
A juzgar por el plan de ejecución y el volumen de datos de la tabla, si hay un problema con la sobrecarga de SQL, debería aparecer en la tabla SAMS_CHECKINOUT. Verifiquemos la declaración de creación del índice en la tabla y veamos si hay algún problema.
El siguiente es el sql problemático visto en el informe awr. Tiene 9 variables y pertenece a la consulta relacionada de la interfaz de la aplicación. La implementación real de la verificación manual en sqlplus es la siguiente:
Los siguientes son los valores de las variables de enlace consultadas. Puede ver el valor real de una variable mirando la vista v$SQL_bind_capture. Si lleva mucho tiempo, puede utilizar la siguiente declaración para ver la información histórica de la variable de enlace.
La siguiente es una ejecución manual del seguimiento con la opción de seguimiento automático activada. No hay ningún problema en términos de eficiencia de ejecución.
A juzgar por el plan de ejecución y el volumen de datos de la tabla, si hay un problema con la sobrecarga de SQL, debería aparecer en la tabla SAMS_CHECKINOUT. Verifiquemos la declaración de creación del índice en la tabla y veamos si hay algún problema.
Como se puede ver en la figura anterior, el plan de ejecución de la prueba real es diferente del informe awr.
Ahora probemos el sql.
/*+ together_plan_statistics */El plan de ejecución relacionado y sus estadísticas recopiladas son diferentes del plan de ejecución en el informe AWR de este SQL, y el número de lecturas lógicas también es muy diferente del valor en el Informe AWR. Por lo tanto, para determinar el problema con mayor precisión, realice la prueba según los siguientes métodos.
1. SQL se ejecuta en la biblioteca de producción (instancia 1 de la biblioteca SAMS, denominada sams1) y SQLPLUS.
2. Después de la ejecución, ejecute inmediatamente el siguiente comando en la misma ventana de SQLPLUS:
Los resultados son los siguientes:
1. el directorio, para obtener información más creíble.
2. En SQLPLUS, ejecute el siguiente comando: @SQL_RPT 3271368959 1241142411599 va ABS 5 pt ktb.
4. Después de la ejecución, se genera un documento HTML en este directorio para obtener información de datos más detallada de la tabla de estadísticas SQL adjunta.
El análisis preliminar es el siguiente:
1. La lectura lógica de este SQL es 11130, de las cuales la lectura lógica en el paso 37 es 6127, lo que representa más de la mitad. El funcionamiento de este paso es volver a la tabla SAMS_Check Output para obtener el contenido de cuatro columnas: "sc", "Check Time", "sc". "sn", "sc". "in systime" [marca de tiempo, 11] basado en el ROWID obtenido anteriormente.
2. El escaneo completo de la tabla de bloqueo SAMS_I en el paso 38 también contribuye en gran medida a la lectura lógica de todo el SQL. Pero ese no es el punto.
Además, existen dos conceptos en la indexación:
1. Crear un nuevo índice compuesto o convertir un índice existente y crear el índice compuesto en el siguiente orden:
(BADGENUMBER, CHECKTIME, SN, VERIFYCODE, INSYSTIME)
2. Cree un índice compuesto en la tabla SAMS_I lock usando los siguientes nombres y secuencias:
(Número de serie , Alias )
Estos dos indicadores no se crearán por el momento. Comencemos con otros aspectos primero.
Porque durante las pruebas, el plan de ejecución que generó nunca fue consistente con el plan de ejecución mostrado por AWR. Entonces esta puede ser una de las razones por las que no es posible simular 200 millones de lecturas lógicas de bloques. Por lo tanto, el plan de ejecución del SQL problemático está vinculado al SQL de prueba.
Luego ejecute el SQL de prueba, observe y analice el proceso de ejecución y los resultados del SQL de prueba para su posterior procesamiento.
Para hacer realidad la idea anterior, necesitamos utilizar el perfil SQL de ORACLE para cambiar su plan de ejecución sin cambiar el texto SQL. El método de operación es el siguiente:
1. En SQLPLUS, genere un script que cree un perfil SQL para el problema SQL. Una vez ejecutado el script, se le pedirá que ingrese los valores de SQL_ID y PLAN_HASH_VALUE respectivamente. El SQL_ID de nuestro problema SQL es 99vaabs5ptktb y el valor de PLAN_HASH_VALUE es 4243346097. Después de ejecutar el script, se generará un archivo de script en el directorio actual donde se ejecuta SQLPLUS. Su nombre se muestra al final de la ejecución del script. Para facilitar la descripción, el archivo de script S generado se denomina "script SQL problemático".
2. Ejecute el script nuevamente, pero esta vez ingrese SQL_ID y PLAN_HASH_VALUE del SQL de prueba. Su SQL_ID es 3kys9xsdjrm3b y el valor de PLAN_HASH_VALUE es 561269195. Para facilitar la descripción, el archivo de secuencia de comandos generado se denomina "secuencia de comandos SQL de prueba".
3. Abra los dos scripts anteriores en una herramienta de edición de texto, copie las palabras que aparecen entre las siguientes palabras destacadas en el script SQL de la pregunta (excluyendo las palabras destacadas) y sobrescriba las palabras originales en la misma posición en el script SQL de prueba:
h := SYS. ATTR Cuadrado(
…………
………….
……….
: Firma:= DBMS_SQLTUNE. Texto SQL _ TO _ SIGNATURE(SQL _ txt);
4. Guarde el script sql de prueba como un archivo (el sufijo es .SQL)
5. SQLPLUS. Script guardado.
6. Ejecute completamente el SQL de prueba original en SQLPLUS (Nota: establezca el formato SQLPLUS antes de la ejecución para evitar confusión de formato. Por ejemplo, establezca la fila 200 y el tamaño de página 100). p>
7. Ejecute select * from table(DBMS_xplan.display_cursor('',' ',' all stats outlook last ');
Si el script se genera normalmente y no aparece en el mensaje de error en la pantalla, el script se generó correctamente. Por ejemplo, el siguiente mensaje es normal: