Cómo utilizar SQL proporcionado por Oracle
Nota: Hay muchas formas de analizar SQL, así como en función del optimizador y el plan de ejecución de SQL.
Sql_TRACE puede generar el proceso de ejecución de Sql en un archivo de seguimiento.
Primero configure el logotipo del archivo de seguimiento que definió para facilitar la búsqueda.
alterar el archivo de seguimiento del conjunto de sesiones _ identificador = ' mytest ';
Luego inicie SQL_TRACE para la sesión actual. Es mejor no dejar el interruptor encendido todo el tiempo, ya que el coste es elevado.
alter session set sql _ trace = true
Luego ejecutamos una instrucción sql.
Por último, apaga el estado del interruptor.
alter session set SQL_trace = false;
Podemos descargarlo desde el directorio %Oracle_base %/diag/RDBMS/orcl/orcl/trace (la ruta de la versión 11g, si es 10 g, debería ser diferente).
Encuentra tu propio archivo de seguimiento.
El archivo de seguimiento original no es muy legible, por lo que normalmente utilizamos la herramienta tkprof de Oracle para procesar este archivo de seguimiento. Puedes ver la ayuda de tkprof.
tkprof orcl _ ora _ 3820 _ mytest . TRC out
Echemos un vistazo al archivo de seguimiento que acabamos de generar. La información del encabezado describe la versión de tkprof y el significado de ciertas columnas del informe. Para cualquier declaración SQL, debe incluir la fase de análisis Parse-sql, la fase de ejecución Execute-sql y la fase de extracción Fetch-data. La barra horizontal es como se muestra en la figura, incluido el tiempo de CPU de 0,00 segundos, el tiempo de operación total de 0,04 segundos, la lectura física de 0 bloques de datos y ninguna lectura en el modo actual (generalmente,
durante el análisis, el error de caché de la biblioteca: 0 indica que se trata de un análisis suave (el análisis duro y el análisis suave se analizarán más adelante)
Modo optimizador: ALL_ROWS indica que el modo optimizador de Oracle es ALL_ROWS Un optimizador de método de análisis.
El siguiente es el plan específico de ejecución de SQL. Puede ver que el plan de ejecución selecciona el escaneo completo de la tabla.
El archivo de seguimiento procesado es realmente fácil de entender. analizar problemas de rendimiento de SQL.
Utilizo un ejemplo de seguimiento para explicar por qué se necesita el mecanismo de enlace de variables en el sistema OLTP.
Cuando un usuario establece una conexión con la base de datos y cuando envía. una declaración SQL, Oracle realizará una operación de función hash en SQL (el algoritmo hash proporciona un método para acceder rápidamente a los datos. Utiliza un algoritmo para establecer la relación correspondiente entre los valores clave y los valores reales. Cada valor real solo puede tener Un valor clave, pero un valor clave puede corresponder a múltiples valores reales para facilitar el acceso), obtenga un valor hash y luego vaya al * * grupo compartido para encontrar si hay un valor hash coincidente SQL. Si no, Oracle. pensará que sí, a una nueva declaración SQL le siguen los pasos de análisis de sintaxis, análisis semántico, generación del plan de ejecución, ejecución de SQL y, finalmente, devolver los resultados al usuario. Es posible que si se reduce el análisis riguroso, pueda. reducir considerablemente la sobrecarga de recursos gastada por la base de datos en el análisis de SQL.
Primero ejecutemos un SQL 1000 veces y comparemos la diferencia entre las variables vinculadas y las variables no vinculadas después de obtener los resultados. Para el consumo real, necesitamos acumular el tiempo de todos los totales de todas las declaraciones no recursivas y todos los totales de todas las declaraciones recursivas. El primero representa la información relevante de la tabla del diccionario de datos, incluido el control de permisos, y el segundo representa el. información de las declaraciones SQL recursivas derivadas de SQL. Puede ver que las variables están vinculadas. El tiempo de ejecución de toda la declaración es 0,22 + 0,02 = 0,24 segundos, el tiempo de CPU es 0,18 + 0,03 = 0,21 segundos. es 3 veces y el número de ejecuciones es 1003 veces.
Cuando las variables no están vinculadas, el tiempo de ejecución de toda la declaración es 0,28 + 1,29 = 1,57 segundos, el tiempo de CPU es 0,31,26 = 1,57 segundos, el número de análisis es 1002 veces y el número de ejecuciones es 65438 veces. Se puede ver que vincular variables puede generar menores gastos generales. La forma de diseñar las variables de vinculación utilizadas en la base de datos también está estrechamente relacionada con el sistema. Existen muchos problemas de la base de datos desde el principio del diseño.
Análisis de optimización a nivel de aplicación:
En lo que respecta a la arquitectura de tres niveles, la capa de middleware puede desempeñar el papel de un grupo de búfer. Si el número de usuarios simultáneos alcanza el orden de 3000, el middleware puede controlar que no todos los usuarios puedan conectarse directamente a la base de datos. Por supuesto, el programa aquí responderá rápidamente a las solicitudes de los usuarios, asegurando que la cola en el grupo de búfer no espere por mucho tiempo.
La optimización de la capa de aplicación se centra principalmente en programas de aplicaciones, monitorización de middleware, configuración de clústeres, etc. Si se encuentra un problema a nivel de aplicación, primero analice si es un problema de configuración o un problema con el programa en sí. Si la cantidad de usuarios simultáneos es grande y la configuración máxima del grupo de subprocesos de middleware es demasiado pequeña, provocará la acumulación de colas de solicitudes, lo que se refleja en la vista de monitoreo de subprocesos. Generalmente, esto se puede resolver ajustando la configuración máxima del grupo de subprocesos. Echemos un vistazo a la vista de monitoreo de weblogic.
Teniendo en cuenta que si se crea un nuevo hilo para cada solicitud, es difícil implementar una cantidad suficiente de hilos en el sistema. La creación ilimitada de subprocesos puede agotar los recursos del sistema, por lo que se introdujeron grupos de subprocesos. La idea de un grupo de subprocesos es crear una cierta cantidad de subprocesos al comienzo de un proceso y colocarlos en un grupo, donde los subprocesos esperan trabajar. Cuando el servidor recibe una solicitud, activa un subproceso del grupo (si hay uno disponible) para manejar la solicitud. Una vez que se completa el servicio de subprocesos, regresa al grupo de subprocesos para esperar el trabajo posterior.
Para los grupos de subprocesos, es más rápido utilizar subprocesos existentes para manejar solicitudes que esperar a que se creen subprocesos, y el grupo de subprocesos limita la cantidad de subprocesos.
Si sospechamos que se trata de un problema de programa, normalmente podemos utilizar las herramientas que vienen con Java para ayudar a analizarlo. Hay muchas herramientas. Aquí menciono principalmente jvisualvm, que se agrega después de jdk1.6.
Abrimos jdk1.6 para buscar y ejecutar jvisualvm.exe.
Encontramos que la aplicación se divide en dos partes: local y remota. El local incluye el proceso Java que se ejecuta localmente y el remoto puede conectarse al proceso Java en el servidor remoto a través de la configuración. Primero conduzcamos un Tomcat. Puede ver que la aplicación local ha abierto un menú con Tomcat y la identificación del proceso. Haga doble clic para abrir. Aquí nos ocupamos generalmente de dos perspectivas. Monitoreo, hilos.
Entre ellos, la vista de monitoreo presta más atención a las actividades de recolección de basura (como sugiere el nombre, reciclar el espacio de memoria que ya no se usa en el programa) y los cambios en la memoria del montón. Si el cambio en la memoria del montón durante la prueba de esfuerzo muestra una tendencia ascendente, y esta tendencia continúa después del reciclaje manual repetido de GC, indica que existe una alta posibilidad de pérdidas de memoria. Si hay una pérdida de memoria, puede analizar el volcado del montón de Java. La JVM (máquina virtual Java) registra el estado de ejecución del sistema cuando ocurre el problema y lo almacena en un archivo de volcado. Un volcado de montón es una de esas formas de archivo.
La vista del hilo se centra en el estado de ejecución actual del hilo, y aquí se puede generar otro archivo de volcado de Java. Los volcados de Java, también conocidos como volcados de subprocesos, son uno de los archivos de volcado más importantes en la resolución de problemas de JVM. Utilice este archivo para diagnosticar muchos problemas con la JVM. Los problemas típicos incluyen bloqueo de subprocesos, alta utilización de la CPU, fallas de la JVM, falta de memoria dinámica y carga de clases. El bloqueo de hilos es más común.