Puntos de conocimiento relacionados:
INNODB_STATS_PERSIST=ON
O STATS_PERSIST=1
al definir una sola tabla, las estadísticas del optimizador se conservan en el disco. Por defecto, innodb_stats_persistent
está activado.
Las estadísticas persistentes se almacenan en tablas mysql.innodb_table_stats
y mysql.innodb_index_stats
.
La variable habilitada de forma predeterminada innodb_stats_auto_recalc
controla si las estadísticas se calculan automáticamente cuando cambian más del 10% de las filas de la tabla. STATS_AUTO_RECALC
El recálculo automático de estadísticas se puede configurar para una tabla individual especificando la cláusula al crear o modificar la tabla .
Debido a la naturaleza asincrónica del recálculo automático de estadísticas que ocurre en segundo plano, incluso si está habilitado innodb_stats_auto_recalc
, las estadísticas no se volverán a calcular inmediatamente después de ejecutar una operación DML que afecte a más del 10% de la tabla. En algunos casos, el recálculo de las estadísticas puede retrasarse unos segundos. Si se necesitan las últimas estadísticas de inmediato, ejecute ANALYZE TABLE para iniciar un recálculo sincrónico (en primer plano) de las estadísticas.
Si está deshabilitado innodb_stats_auto_recalc
, puede garantizar la precisión de las estadísticas del optimizador ejecutando una instrucción ANALYZE TABLE después de realizar una gran cantidad de cambios en una columna de índice.
Las estadísticas del optimizador no se conservan en el disco al crear o modificar una sola tabla INNODB_STATS_PERSIST=OFF
mediante . STATS_PERSIST=0
En cambio, las estadísticas se almacenan en la memoria y se pierden cuando se apaga el servidor. Las estadísticas también se actualizan periódicamente mediante determinadas acciones y bajo determinadas condiciones.
Cuando se agrega un índice a una tabla existente, o cuando se agrega o elimina una columna, innodb_stats_auto_recalc
las estadísticas del índice se calculan y se agregan a innodb_index_stats
la tabla independientemente del valor de .
Cinco parámetros que afectan las estadísticas
-
innodb_stats_persistent
: Especifica si las estadísticas del índice InnoDB se conservan en el disco. Está habilitado de forma predeterminada. -
innodb_stats_persistent_sample_pages
: el número de páginas de índice que se van a muestrear al estimar la cardinalidad y otras estadísticas para las columnas de índice (como las calculadas por la tabla de análisis). Aumentar este valor puede mejorar la precisión de las estadísticas del índice, peroinnodb_stats_persistent_sample_pages
establecer un valor más alto puede hacer que las tablas de análisis tarden más en ejecutarse. -
innodb_stats_auto_recalc
: Hace que InnoDB recalcule automáticamente las estadísticas persistentes después de cambios significativos en los datos de la tabla. El umbral es el 10 % del número de filas de la tabla y está activado de forma predeterminada. -
innodb_stats_include_delete_marked
: Si InnoDB incluye registros marcados para su eliminación al calcular las estadísticas del optimizador persistente, está desactivado de forma predeterminada. -
innodb_stats_transient_sample_pages
: el número de páginas de índice que se van a muestrear al estimar la cardinalidad y otras estadísticas para las columnas de índice (como las calculadas por la tabla de análisis). El valor predeterminado es 8. Aumentar este valor puede mejorar la precisión de las estadísticas del índice, mejorando así los planes de ejecución de consultas, pero a costa de una mayor E/S al abrir tablas InnoDB o recalcular estadísticas. Este parámetro solo se aplica si está deshabilitado para la tablainnodb_stats_persistent
; si está habilitado,INNODB_STATS_PERSIST
se aplicaINNODB_STATS_PERSIST_SAMPLE_PAGES
en su lugarinnodb_stats_sample_pages
Resumir:
1. La información estadística no persistente se actualizará automáticamente en las siguientes situaciones:
- Ejecutar ANALIZAR TABLA
innodb_stats_on_metadata=ON
En este caso, ejecute MOSTRAR ESTADO DE TABLA, MOSTRAR ÍNDICE y consulte las TABLAS y ESTADÍSTICAS en INFORMACIÓN_ESQUEMA.- Con la función --auto-rehash habilitada, use el cliente mysql para iniciar sesión
- La mesa se abre por primera vez.
- Desde la última actualización de la información estadística, los datos de la tabla 1/16 han sido modificados.
Las desventajas de las estadísticas no persistentes son obvias. Si una gran cantidad de tablas comienzan a actualizar las estadísticas después de reiniciar la base de datos, tendrá un gran impacto en la instancia, por lo que actualmente se utilizan estadísticas persistentes.
2. Las estadísticas de persistencia se actualizarán automáticamente en las siguientes situaciones:
-
INNODB_STATS_AUTO_RECALC=ON
En este caso se modifica el 10% de los datos de la tabla. -
Agregar nuevo índice
3. Manejo de información estadística inexacta
Verificamos el plan de ejecución y descubrimos que no se utilizó el índice correcto. Si se debe a una gran diferencia en la información estadística en innodb_index_stats, se puede manejar de las siguientes maneras:
- Actualice manualmente la información estadística. Tenga en cuenta que se agregarán bloqueos de lectura durante la ejecución:
ANALIZETABLE TABLE_NAME;
- Si la información estadística aún es inexacta después de la actualización, puede considerar agregar páginas de datos para el muestreo de tablas. Hay dos formas de modificarla:
a. El INNODB_STATS_PERSISTENT_SAMPLE_PAGES
valor predeterminado de las variables globales es 20;
b. Una sola tabla puede especificar el muestreo de la tabla:
ALTER TABLE TABLE_NAME STATS_SAMPLE_PAGES=40;
Después de la prueba, STATS_SAMPLE_PAGES
el valor máximo aquí es 65535. Si se excede, se informará un error.
c. Actualice manualmente las estadísticas innodb_table_stats
de innodb_index_stats
la tabla (la modificación de estas dos tablas no generará binlog) y luego use FLUSH TABLE tbl_name
declaraciones para cargar las estadísticas actualizadas.
Disfruta de GreatSQL :)
Acerca de GreatSQL
GreatSQL es una base de datos nacional independiente de código abierto adecuada para aplicaciones de nivel financiero. Tiene muchas características principales, como alto rendimiento, alta confiabilidad, alta facilidad de uso y alta seguridad. Puede usarse como un reemplazo opcional de MySQL o Percona Server. y se utiliza en entornos de producción online, completamente gratuito y compatible con MySQL o Percona Server.
Enlaces relacionados: Comunidad GreatSQL Gitee GitHub Bilibili
Gran comunidad SQL:
Sugerencias y comentarios sobre recompensas de la comunidad: https://greatsql.cn/thread-54-1-1.html
Detalles de la presentación del premio del blog comunitario: https://greatsql.cn/thread-100-1-1.html
(Si tiene alguna pregunta sobre el artículo o tiene ideas únicas, puede ir al sitio web oficial de la comunidad para preguntarlas o compartirlas ~)
Grupo de intercambio técnico:
Grupo WeChat y QQ:
Grupo QQ: 533341697
Grupo WeChat: agregue GreatSQL Community Assistant (ID de WeChat:) wanlidbc
como amigo y espere a que el asistente de la comunidad lo agregue al grupo.