MySQL - motor de almacenamiento InnoDB detallada

fuente original: https://www.jianshu.com/p/519fd7747137

Autor: pequeña del Norte buscan

Versión Mysql5.5 desde el principio, InnoDB es las tablas del motor de almacenamiento por defecto. Se caracteriza por el diseño de bloqueo de línea, el apoyo MVCC, claves externas de apoyo, proporcionando de lectura consistencia no de bloqueo, mientras que siendo diseñado para utilizar el uso más eficiente de la memoria, así y la CPU.

Los contenidos principales:

  • arquitectura InnoDB
  • tecnología de punto de comprobación
  • Características clave InnoDB

Una, la arquitectura InnoDB

Breve descripción de la arquitectura del motor de almacenamiento figura InnoDB:

img

motor de almacenamiento InnoDB tiene una pluralidad de bloques de memoria, bloques de memoria que constituyen un banco de memoria de gran tamaño. subproceso de fondo es responsable de actualización del banco de memoria, actualizar los datos modificados en el disco y así sucesivamente. A continuación nos presentaron subproceso en segundo plano y grupos de memoria.

1.1 Antecedentes hilo

InnoDB fondo hay una serie de diferentes temas, como responsable de las diferentes tareas. No son los siguientes:

  • Maestro Autor
    Este es el núcleo de un hilo, es principalmente responsable de la agrupación de almacenamiento intermedio de datos de forma asíncrona volcado a disco para asegurar la consistencia de los datos, incluyendo actualización robado a la página, inserción de combinación de búfer, el reciclaje de la página DESHACER.
  • IO hilo
    en el motor de almacenamiento InnoDB hace un amplio uso de S asíncrona para procesar la solicitud de escritura IO, el trabajo Tema IO es el principal responsable de estas solicitudes de devolución de llamada de controlador IO.
  • Subproceso de depuración
    después de la transacción se ha confirmado, ya no se puede deshacer necesaria registro, es necesario recuperar purga hilo ha sido utilizado y asignado página de deshacer. InnoDB soporta múltiples subproceso de depuración, al hacerlo puede acelerar la recuperación de deshacer la página.
  • El hilo Cleaner
    Página Cleaner es el hilo en InnoDB versión 1.2.x de la reciente introducción, su función es liberar una operación de actualización antes de que las páginas sucias se ponen en un hilo separado al completo, por lo que la reducción del trabajo y del hilo principal para consultas de los usuarios el bloqueo de roscas.

1.2 memoria

Esta parte, que será una buena información en línea para tratar integrada, intuitiva describir.
motor de almacenamiento InnoDB es un almacenamiento basado en disco, lo que significa que los datos se almacenan en el disco, ya que la brecha entre la velocidad de la CPU y la velocidad del disco, motor InnoDB grupo de búfer a utilizar la tecnología para mejorar el rendimiento global de la base de datos. Cuando el grupo de búferes es simplemente un área de memoria. Operar página leída en la base de datos, la página es la primera lectura del disco se almacena en el grupo de búferes, la próxima leer la misma página, la página no es la primera determinación amortiguar la piscina, si al decir la página está en el grupo de búferes hit leer directamente la página. De lo contrario, lea la página en el disco. Para la base de datos de la página operación de modificación, modificar la primera página de búfer en la piscina, y luego a una cierta frecuencia enrojecida en el disco, no todos los cambios para actualizar la última página en el disco.

Piscina de los tipos de datos de caché de la página: página de índice, páginas de datos, páginas utilizan el deshacer, inserto de amortiguamiento, índice hash adaptativo, información de bloqueo InnoDB, los datos de la información del diccionario. Índice y las páginas de datos representan una gran parte de la agrupación de almacenamiento intermedio (saber estas páginas, estas páginas se pueden utilizar como un sustantivo, no confundir). En InnoDB, el tamaño de página por defecto del buffer de la piscina es de 16 KB.

img

Ya sabemos que la agrupación de almacenamiento intermedio es en realidad un espacio continuo de memoria, ahora se enfrenta a la pregunta: ¿cómo la página en la memoria caché de disco a la memoria búfer piscina en ella? Directamente a la necesidad de almacenar en caché una página dentro de un odio a la agrupación de almacenamiento intermedio en ella? No, no, con el fin de mejorar la gestión de estas páginas en caché, InnoDB buffer para cada página crea una llamada información de control, la información de control incluye el número de la tabla de páginas pertenece espacio, número de página, la página de búfer en piscina se ocupa de algunos de los datos clave y la información sobre LSN (LSN'll le permiten bloquear e ignorado), y por supuesto hay alguna otra información de control.

Cada información de control de caché correspondiente al tamaño de la memoria página es la misma, ponemos la información de control correspondiente a cada página lleva un trozo de memoria denominado un bloque de control que, bloquear y controlar la caché de páginas es de uno a uno, todos se almacena en la memoria intermedia de la piscina, en el que el bloque de control se almacena en memoria intermedia borde delantero piscina, se almacena en la caché de páginas back buffer piscina, por lo que todo el espacio de memoria correspondiente memoria intermedia piscina que tiene este aspecto:

img

Los restos entre el bloque de control y una caché de páginas es lo que es? Después de que piensa, ah, cada bloque de control de caché corresponde a una página que en asignar suficientes bloques de control y las páginas almacenadas en caché, puede seguir siendo algo que no es suficiente espacio y un par de bloque de control de tamaño de caché de páginas, la naturaleza no podría ser utilizado a mí mismo, esto fue un poco menor que el espacio de memoria se llama fragmentos. Por supuesto, si se establece el tamaño de la agrupación de almacenamiento intermedio sólo es bueno, puede no producir residuos ~

A principios conocemos la estructura de la agrupación de almacenamiento intermedio. Entonces el motor de almacenamiento InnoDB es cómo manejar el grupo de búferes. Estaba confundido al hablar ella, (esta parte no se puede ver, debido a que algunos términos que no están relacionados a) ver "Mysql Tecnología de información privilegiada", el libro, hablan más lista LRU, Lista libre apenas pasa por encima, no la lista libre la asignación inicial es cómo o qué tipo de estructura, lo que lleva a la gestión de la agrupación de almacenamiento intermedio siempre me imagino no sale, y luego ir a través de encontrar información en Internet, ser descubierto. Mirarlo:

La primera vez que inicie el servidor de MySQL, es necesario completar el proceso de inicialización de la agrupación de almacenamiento intermedio, es la asignación de búfer piscina de espacio de memoria, dividirlo en varias páginas y bloques de control de caché. Pero en este momento y no hay páginas de disco reales se almacenan en caché en la agrupación de almacenamiento intermedio (porque no se utilizan), luego con el programa que se ejecuta, y seguirá teniendo una página en el disco se almacena en caché de búfer piscina, entonces la pregunta es, lee una página del disco a la agrupación de almacenamiento intermedio en el que la posición cuando las páginas de caché en ella? O cómo distinguir agrupación de almacenamiento intermedio en el que las páginas de caché son libres, que se ha utilizado para ello? Que será mejor registro en algún aspecto las páginas que están disponibles, podemos poner todas las páginas libre embalado en un nodo para formar una lista enlazada, esta lista también se puede llamar libre de la lista (o la lista libre). Debido a que se acaba de completar la inicialización de búfer piscina todas las páginas almacenadas en caché están inactivos, por lo que cada página en caché se añadirá a la lista, en el supuesto de que el número de páginas en caché en la agrupación de almacenamiento intermedio puede acomodar hasta n, que los aumentos de la lista libre representaciones es la siguiente:

img

Como puede verse en la figura, tenemos que administrar esta lista gratuito, define específicamente el jefe de la dirección de la lista de nodos vinculados, la dirección de nodo de la cola, y el número de la corriente vinculada información de lista de nodos de una información privilegiada de control de esta lista contiene niño. Hemos registrado una cierta dirección de la página de caché en el bloque de control de cada nodo en la lista libre, y cada uno de los bloques de control de caché de páginas se graban con una dirección de página caché correspondiente, el equivalente de cada nodo corresponde a una lista Free gratis páginas en caché.

Con esto será más fácil de la lista libre, cada vez que una página necesidades que se cargan desde el disco a la agrupación de almacenamiento intermedio, para tomar una página libre de caché gratuito de la lista, y el bloque de control de la información correspondiente a la caché de páginas relleno, entonces la caché de páginas nodo de la lista libre correspondiente se elimina de la lista, lo que indica que la memoria intermedia de página se ha utilizado -

Creo que esta parte del autor original en muy buen mapa es también muy duro, me dirijo directamente a la pregunta.

No vaya demasiado lejos y olvidar por qué la salida.
Una revisión breve, ¿por qué hablar de lista libre? Decir cómo administrar barra de agrupación de almacenamiento intermedio. Ese es el equivalente de servicio de base de datos de lista libre no sólo empezar cuando la página de datos, datos de mantenimiento estructura de amortiguación libre de páginas de caché piscina.

Una vez más revisar brevemente el mecanismo de trabajo de la agrupación de almacenamiento intermedio. Buffer Pool dos funciones principales: Una de ellas es la lectura acelerada, es acelerar la escritura. Acelerar leerlo? Es decir, cuando la necesidad de acceder a una página de datos, si la página ya está en el grupo de búferes, entonces ya no hay necesidad de acceder al disco, se puede obtener directamente el contenido de esta página de la agrupación de almacenamiento intermedio. Acelerada escribirlo? Cuando una página tiene que ser modificado es cuando la primera página en los cambios agrupación de almacenamiento intermedio, anote el registro de rehacer relacionada, incluso si modificar esta página ha sido completado. En cuanto a las páginas modificadas se vuelca en disco cuando en realidad, este es un hilo de actualización en segundo plano para completar.

Al mismo tiempo lograr lo anterior dos funciones deben ser considerados a condiciones objetivas, ya que el tamaño de la memoria del equipo está limitado, por lo que el tamaño del MySQL InnoDB Buffer Pool también está limitada, si un tamaño de página de caché en memoria de más de Buffer tamaño de la piscina, es decir, la lista no tiene páginas en caché libre libre extra cuando no sea embarazoso, no había tal cosa el país? Por supuesto, algunos de la página en caché de edad retirado de la agrupación de almacenamiento intermedio, una nueva página y luego poner a mí mismo - por lo que la pregunta es, ¿qué página en caché se retira?

Para responder a esta pregunta, tenemos que volver a nuestra intención original para establecer Buffer Pool, sólo queremos la interacción de E / S y reducir el disco, el mejor momento cuando se accede a una página de haber sido almacenado en caché en la agrupación de almacenamiento intermedio . Supongamos que visitamos un total de n veces a la página, la página ha sido visitada ya dividida por n se llama la tasa de aciertos de caché es el número de veces que el caché, nuestra expectativa es hacer que la tasa de aciertos de caché tan alto como sea posible -

¿Cómo mejorar la memoria caché de la tasa de éxito es? InnoDB Buffer Pool algoritmo LRU clásica para eliminar la página, con el fin de mejorar la tasa de acierto de caché. Buffer piscina cuando no hay más páginas de caché son libres, tenemos que eliminar la parte de la memoria caché de la página utilizado recientemente. Pero, ¿cómo sabemos qué página caché frecuentemente utilizado recientemente, que hace poco rara vez se utiliza? Oh, la magia de la lista una vez más fue muy útil, podemos crear una lista, esta lista se debe al principio de menos recientemente utilizada para eliminar el almacenamiento en caché páginas, por lo que esta lista puede ser llamada lista LRU (menos recientemente utilizado) . Cuando necesitamos acceder a una página, se puede tratar la lista LRU:

  • Si la página no está en Tampón piscina, cuando la página se carga desde el disco en la caché de páginas Buffer Pool, poner el paquete en la lista de nodos de peluche encabezado de la página de caché.
  • Buffer Pool Si la página, la página directamente a los correspondientes LRU lista de nodos se mueve a la cabeza de la lista.

Pero al hacerlo, tener algunos problemas de rendimiento, tales como el escaneo completo de tabla o un conjunto de datos de copia de seguridad lógicas para poner el calor se precipitó, que dará lugar a problemas de contaminación que conducen a la piscina! Todas las páginas de datos de agrupación de almacenamiento intermedio en la sangre se han cambiado una vez, en otro momento de ejecución de consultas y tienen que ser cargados desde el disco para realizar una operación de búfer piscina, y la frecuencia de tales declaraciones para realizar un escaneo completo de tabla no es alto, cada vez se ejecutarán en el búfer de piscina en la caché de páginas por una vez la sangre, lo que afecta seriamente el uso de otras consultas tampón piscina, reduce seriamente la tasa de acierto de caché!

Así motor de almacenamiento InnoDB para el algoritmo LRU tradicional de hacer alguna optimización, unido al punto medio en InnoDB. Nueva página de leer, aunque las últimas páginas de acceso, pero no directamente en la cabeza de la lista LRU, pero la posición del punto medio de la inserción de la lista LRU. Este algoritmo se llama el stategy inserción punto medio. La configuración por defecto se inserta a 5/8 de la longitud de la lista. punto medio controlado parámetro innodb_old_blocks_pct.

Antes de la lista del punto medio se llama la nueva lista, que se llama después de la lista de edad. La página simplemente se puede entender como una nueva lista de los datos más rápidas activas.

Mientras tanto también se introduce el motor de almacenamiento InnoDB para representar la posición mediados innodb_old_blocks_time después de leer la página de cuánto tiempo debe esperar antes de ser añadido al extremo caliente de la lista LRU. Este parámetro se puede ajustar para asegurar que los datos no es fácil ser cepillo caliente.

Después de una buena, lista básica LRU marcado, continuamos. Anteriormente hablamos de la actualización en la página agrupación de almacenamiento intermedio se realiza en primer lugar, y la página en el disco y que es incompatible, por lo que el caché de páginas también se conoce como páginas sucias (nombre Inglés: página sucia). Así que considere estas páginas para ser modificados cuando tiraba en el disco? ¿En qué orden se sonrojó al disco? Por supuesto, la forma más fácil es tener lugar una vez cada modificación sincronizada inmediatamente a la página correspondiente en el disco, pero los datos frecuentes a un rendimiento de escritura en disco tendrá graves repercusiones en el programa (después de todo el disco lento como una tortuga). Así que después de cada modificación de las páginas en caché, no estamos en un apuro para modificar inmediatamente la sincronización en el disco, pero para sincronizar algún momento futuro en el tiempo, el hilo actualización en segundo plano a su vez se sonrojó al disco, modificar el aterrizaje para alcanzar el disco.

Pero si no sincroniza inmediatamente en el disco, entonces el tiempo después de la resincronización de cómo sabemos agrupación de almacenamiento intermedio en el que las páginas son páginas sucias, las páginas que nunca se han cambiado? No podemos poner todas las páginas en caché se sincronizan en el disco, si agrupación de almacenamiento intermedio se establece grande, digamos 300G, tanto que la sincronización de una sola vez de los datos vamos a muerte lenta! Por lo tanto, no tenemos más remedio que crear una lista enlazada para almacenar las páginas sucias, los que se han modificado las páginas de la cadena LRU se requiere para unirse a esta lista, ya que las páginas están en esta lista necesidad de ser enviado a la disco, también llamado lista A RAS, a veces abreviado como lista GRIPE. Lista libre de la construcción y casi lista, que no voy a entrar en detalles. Aquí se refiere a las páginas sucias modificados después de la página se carga primero en tampón de piscina es modificada, sólo el primero modificado si se necesita añadir a la lista FLUSH (código de acuerdo oldest_modification Página cabeza == 0 para determinar si el la primera modificación), si la página se modifica de nuevo no va a poner una lista FLUSH porque ya existe. Tenga en cuenta que, los datos reales son todavía las páginas sucias LRU lista enlazada, y sucio FLUSH registro de la página simplemente señalar la lista de páginas sucias en la lista LRU vinculados a través de punteros. A RAS y la lista de páginas sucias se clasifica según oldest_lsn (Este valor representa el número LSN cuando se cambia la primera página, los valores correspondientes oldest_modification, cada cabeza de registro de página) vacían en el disco, cuanto menor sea el valor de una la primera se actualicen, a inconsistencias en los datos evitar.

Nota: las páginas sucias presente tanto en la lista LRU, existe también la lista Color. lista LRU se utiliza para gestionar la disponibilidad de página de grupo de búfer, Flush utiliza para gestionar la lista se actualiza la página en el disco, los dos se afectan entre sí.

La relación entre estos tres importante lista (lista LRU, lista libre, lista flush) puede ser representado por el siguiente diagrama:

img

Libre relación lista entre sí la lista LRU está circulando, en las páginas de ida y vuelta entre el reemplazo de dos listas. lista sucia FLUSH y los datos de página grabados, también a través del puntero a la lista LRU, la lista FLUSH cadena figura LRU se envuelve.

Dos, la tecnología de punto de comprobación

Tener la piscina, dijo que la tecnología siguiente punto de control.
tecnología de punto de comprobación se utiliza para resolver los siguientes problemas:

  • el tiempo de recuperación de base de datos Acortar
  • Cuando la piscina no es suficiente, las páginas sucias se vacían en el disco
  • Cuando los registros de rehacer no están disponibles, el lavado de las páginas sucias

base de datos de tiempo de recuperación se acortan, registro de rehacer registra la ubicación del punto de control, la página antes de este punto se han volcado en el disco, sólo tiene que hacer de nuevo registro después de la recuperación puesto de control. Esto reduce enormemente el tiempo de recuperación.

Cuando la piscina no es suficiente, de acuerdo con el algoritmo LRU, derramando la página menos recientemente utilizada, si la página es páginas sucias, aplicar puesto de control, las páginas sucias se vacían en el disco.

Rehacer los registros no están disponibles, se refieren a hacer de nuevo esta parte del registro no puede ser cubierto, y por qué? Porque: Porque registro de rehacer está diseñado para ser reciclado. Esta parte de los datos correspondientes no se vacía en el disco. la recuperación de la base de datos, si no es esta parte del registro puede ser sobrescrito; si es necesario, deben cumplir puesto de control, un grupo de búferes página se actualice al menos los registros de rehacer en la posición actual.

Cada puesto de control de cuántas páginas se vacían en el disco? Donde a ensuciarse cada página? ¿A qué hora-desencadenó puesto de control?

motor de almacenamiento InnoDB interna de dos puesto de control, fueron los siguientes:

  • Checkpoint aguda
  • Fuzzy Checkpoint

Checkpoint aguda se produce cuando la base de datos se apaga, todas las páginas sucias para refrescar vuelta al disco, que es el modo de funcionamiento por defecto, es decir, los parámetros: innodb_fast_shutdown = 1.
No se aplica para actualizar la base de datos de tiempo de ejecución.

La base de datos está en marcha, el motor de almacenamiento InnoDB utiliza Checkpoint Fuzzy interna, simplemente refrescar la parte sucia de la página.

Fuzzy Checkpoint varios casos ocurren:
①MasterThread Checkpoint
asíncrono actualiza cada segundo o cada 10 segundos para actualizar un determinado porcentaje de la página en el disco de la lista de páginas sucias grupo de búfer. actualización asíncrona, que esta vez el motor de almacenamiento InnoDB puede realizar otras operaciones, el hilo consulta del usuario no está bloqueada.

Checkpoint ②FLUSH_LRU_LIST
motor de almacenamiento InnoDB necesita para asegurar la lista LRU de casi 100 páginas libres disponibles. Antes de la versión 1.1.x InnoDB, el usuario chequea consulta la lista LRU si hay suficiente espacio para operar. Si no es así, LRU algoritmo, al final de desbordamiento de la lista LRU de páginas de acuerdo con estas páginas si hay páginas sucias necesita ser puesto de control. De ahí el nombre: puesto de control flush_lru_list.

InnoDB comienzo 1.2.x, esta comprobación en un proceso separado (Página Cleaner) en curso. Beneficios: 1. Reducir la presión para reducir el maestro de rosca usuario 2. Tema bloqueado.

Ajustar parámetros: innodb_lru_scan_dept: controlan el número de páginas disponibles en la lista LRU, el valor por defecto 1024

③Async / sincronización Flush Checkpoint
se refiere a la situación de registro de rehacer no está disponible, es necesario forzar una actualización de páginas en el disco, en este momento cuando las páginas sucias lista de la página seleccionada.
Este caso es asegurar la disponibilidad de los registros de rehacer, es decir, los registros de rehacer se pueden reciclar parte cubierta del espacio es demasiado pequeño, dicho de otra manera, es un tiempo muy corto producido un gran número de registro de rehacer.
Entonces habrá varias variables, diagramas no es difícil, echar un vistazo más de cerca.
motor de almacenamiento InnoDB, por LSN (Log Número de Secuencia) versión etiquetada, el LSN es el número de 8 bytes. Cada página tiene LSN, hay rehacer LSN registro, puesto de control no LSN.
Escrito al registro LSN: redo_lsn
actualizar la página fecha posterior LSN en el disco: checkpoint_lsn
define como sigue:
checkpoint_age = redo_lsn - checkpoint_lsn
async_water_mark = 75% * total_redo_file_size
sync_water_mark = 90% * total_redo_file_size
proceso de actualización como se muestra a continuación:

img

④Dirty Página demasiada Checkpoint
que es demasiado sucia, páginas punto de control obligatorio. Piscina está disponible para asegurar suficientes páginas.
Parámetros: innodb_max_dirty_pages_pct = 75 representa: cuando el número de páginas sucias en el grupo de búferes 75%, punto de control de fuerza. Después de 75 1.0.x por defecto

Tres, InnoDB Características clave

Inserte amortiguar 3.1

Insertar Buffer es una característica clave del motor de almacenamiento InnoDB es la más emocionante y la emoción de una función. Pero este nombre podría llevar a la gente a pensar que el buffer de inserciones es una parte integrante de la agrupación de almacenamiento intermedio. En realidad, InnoDB grupo de búfer tiene información Insertar Buffer es bueno, pero el buffer de datos y páginas de inserción, así como una parte de las páginas físicas.

En general, la clave principal es un identificador único para la fila. Por lo general, el orden de aplicación de filas en la grabación de inserción se lleva a cabo de acuerdo con la clave maestra se inserta en orden creciente. Por consiguiente, la secuencia de inserción generalmente se agrupan índice, que no requiere disco azar lee. Porque, para la tasa de inserción en estos casos sigue siendo muy rápido. (Si la clase de clave primaria es una clase de la UUID, y luego inserta como un índice secundario, es aleatorio.)

Si el índice no es el único no agregado. Durante la inserción, se inserta el almacenamiento de datos para el nodo hoja índice no agrupado no en secuencia, a continuación, la necesidad de acceder a una página discreta no agrupado índice, debido a la presencia de los de acceso aleatorio degradación del rendimiento conduce a la inserción. Esto se debe a las características de la B + árbol determina la inserción índice no agrupado de discreto.

Insertar Buffer diseño, insertos y cambios a la índice no agrupado no se inserta directamente en cada página de índice, pero la primera índice no agrupado se determina si la página se inserta en el grupo de búferes, si está presente, directamente insertada, no existe, la primera en un objeto Insertar Buffer. Esta base de datos ha sido insertado en los nodos hoja índice no agrupado, pero no realmente, sino que se almacena en otra ubicación. Luego de fusionar (fusión) y una operación auxiliar Insertar memoria intermedia de página índice de nodos secundarios y con cierta frecuencia, el tiempo generalmente puede insertarse en una de una pluralidad de (ya que un índice de la página), que mejoran en gran medida la operativa para una actuación inserción índice no agrupado.

Dos condiciones se deben cumplir:

  • El índice es un índice secundario;
  • El índice no es único.

índices secundarios no pueden ser únicos, ya que al insertar la memoria intermedia, no la base de datos para encontrar la página de índice para determinar la singularidad del registro insertado. Si vas y no encontrará ciertamente una lectura discreta se produce, lo que carece de sentido Insertar Buffer.

3.2 escribir dos veces

Si el inserto de amortiguamiento para mejorar el rendimiento de escritura, luego dos escritura es mejorar la fiabilidad.

Antes de la introducción de los dos escritura, hablar de escritura parcial fallado:
imaginar tal escenario una, cuando la base de datos está escribiendo una página de datos de la memoria en el disco, el tiempo de inactividad de base de datos, lo que resulta en la parte de sólo escritura de la página de datos, que es parte de falla la escritura, que puede causar la pérdida de datos. En este momento no se pueden recuperar mediante registros de rehacer, debido a rehacer registro es modificar la página física, si la página en sí está dañado, registro de rehacer no puede hacer nada.

A partir del análisis anterior, se sabe que, en el caso de un error de escritura parcial, antes de aplicar los registros de rehacer, necesita una copia de la página original, dos de escritura es resolver este problema, es el siguiente esquema:

img

image.png

Dos necesidad de escritura para añadir dos partes adicionales:
1 buffer de escritura dos veces) memoria (escritura doble amortiguación), el tamaño de 2 MB
2) disco compartido espacio de tabla contigua 128, sino también para el tamaño de 2 MB

El principio es el siguiente:
1) Cuando las páginas piscina sucia tampón de refresco no se escriben directamente en el archivo de datos, pero la primera copia a dos veces el búfer de memoria de escritura.
2) dos veces y luego escribir la memoria intermedia compartida se escribe en el disco dos veces el espacio de tablas, cada una de 1 MB de escritura
. 3) después de la segunda etapa sea completa, entonces el archivo de datos de dos buffer de escritura de escritura

Esto se puede resolver parte del problema antes mencionado error de escritura, porque ya hay una copia de una copia de las páginas de datos en el espacio de disco mesa compartida, los datos de proceso si el archivo de base de datos está escrito en la página, en la recuperación de la instancia, a partir de encontrar la copia de la página del espacio de tablas compartido, se sobrescribirá la copia original de la página de datos, a continuación, aplicar los registros de rehacer pueden ser.

Paso 2 es donde la sobrecarga de rendimiento, pero el espacio de tablas de disco compartido es continua, por lo que el costo no es muy grande. parámetros de la función pueden ser escritos por dos skip_innodb_doublewrite discapacitados, se habilitan de forma predeterminada, se recomienda encarecidamente que active la función.

MySQL InnoDB cuenta con: dos escritura (doublewrite)
características InnoDB - Los dos escritura

3.3 índices hash adaptativos

lookup Hash es un método muy rápido, en general, la complejidad de tiempo es O (1). Encontrar el número del árbol B +, dependiendo de la altura del árbol B + en el entorno de construcción, la altura del árbol B + es generalmente 3-4 capas, la consulta no necesita 3-4 veces.

InnoDB consulta del motor de almacenamiento supervisará cada página de índice en la tabla. Si el índice hash se puede observar para mejorar la velocidad establecida, que se reanuda índices hash, llamados índices hash adaptativo (índice hash adaptativo, AHI). IAH por una página de configuración de árbol B + de la agrupación de almacenamiento intermedio. Por lo tanto, el establecimiento de muy rápido, y no construir un índice hash para toda la tabla. motor de almacenamiento InnoDB automáticamente se configura automáticamente por alguna página de índice hash caliente basado en la frecuencia y modo de acceso.

AHI tiene un requisito para el modo de acceso continuo (consulta) de esta página debe ser el mismo. Por ejemplo, el índice de unión (a, b) que tiene los modos de acceso siguiente:

  • Donde A = XXX;
  • Donde A = xxx y B = xxx .
    Si los dos se alternan consulta anterior, el motor de almacenamiento InnoDB no lo hace la estructura IAH de la página. Además IAH existen los siguientes requisitos:
  • Visitado 100 veces en este modo;
  • Páginas visitadas por el patrón de N veces, donde N = páginas grabación / 16.
    De acuerdo a los documentos oficiales muestran, después de permitir que el IAH, leer y velocidad de escritura se puede aumentar en 2 veces, responsables de índice de desempeño operacional de enlaces puede aumentar en 5 veces. La idea del diseño es la liberalización de la base de datos, la base de datos sin la necesidad de ajustar artificialmente el DBA.

3,4 asíncrono IO (AIO)

Con el fin de mejorar el rendimiento de las operaciones de disco, los sistemas de bases de datos actuales de uso asíncrono manera IO para manejar las operaciones de disco. InnoDB también es cierto.

Y AIO corresponde sincronización IO, es decir, una vez por cada operación de IO, es necesario esperar a que el final de esta operación con el fin de continuar con la siguiente operación. Sin embargo, si un usuario escribe un escaneo cuestiones índice de consulta, a continuación, esta sentencia SQL puede necesitar para escanear varias páginas de índice, que requieren múltiples operaciones de IO. En cada página de un escaneo y luego esperar a que se complete la siguiente exploración, no es necesario. El usuario puede entonces emitir una solicitud IO, después de emitir una adición inmediata solicitud de IO, cuando todo IO solicitud se ha completado, la espera para la realización de todas las operaciones de IO, que es AIO.

AIO Otra ventaja es la operación de combinación IO, es decir, múltiples operaciones IO IO en uno, esto puede aumentar el rendimiento IOPS.

Antes de InnoDB 1.1.x, AIO se logra mediante código de simulación del motor de almacenamiento InnoDB. Pero después de esto, el apoyo a nivel de la AIO núcleo, llamado el nativo AIO. Nativo AIO requiere compatibilidad del sistema operativo. Windows y Linux son compatibles, pero Mac no está disponible. En la elección del sistema operativo, servidor de base de datos MySQL, es necesario considerar factores en este sentido.

MySQL puede decidir si se debe habilitar nativo AIO parámetro innodb_use_native_aio. En el motor de almacenamiento InnoDB, lectura anticipada para leer todo el camino a través AIO completado, refrescar las páginas sucias, sino también por la AIO completado.

3.5 Actualizar la página contigua

motor de almacenamiento InnoDB al actualizar una página sucia, la página detectará todas las páginas en las que el área (extensión), si se trata de páginas sucias, a continuación, actualice juntos. La ventaja de esto es que más IO puede ser escrito por un AIO operaciones en las operaciones de IO. El mecanismo de trabajo tiene ventajas significativas en el disco mecánico tradicional. Sin embargo, dos cuestiones deben ser considerados bajo la barra:

No es la página muy sucia se escribe, y luego la página pronto se convertirá en una página sucia?
Los SSD tienen un alto IOPS, qué necesito esta característica?
e_aio para decidir si se debe habilitar nativo AIO. En el motor de almacenamiento InnoDB, lectura anticipada para leer todo el camino a través AIO completado, refrescar las páginas sucias, sino también por la AIO completado.

3.5 Actualizar la página contigua

motor de almacenamiento InnoDB al actualizar una página sucia, la página detectará todas las páginas en las que el área (extensión), si se trata de páginas sucias, a continuación, actualice juntos. La ventaja de esto es que más IO puede ser escrito por un AIO operaciones en las operaciones de IO. El mecanismo de trabajo tiene ventajas significativas en el disco mecánico tradicional. Sin embargo, dos cuestiones deben ser considerados bajo la barra:

No es la página muy sucia se escribe, y luego la página pronto se convertirá en una página sucia?
Los SSD tienen un alto IOPS, qué necesito esta característica?
Con este fin InnoDB versión 1.2.x motor de almacenamiento comenzó a proporcionar parámetros para decidir si se debe habilitar innodb_flush_neighbors. Para el disco duro mecánico tradicional se recomienda, mientras que para las unidades de estado sólido puede ser cerrado.

Publicado cuatro artículos originales · ganado elogios 0 · Vistas 510

Supongo que te gusta

Origin blog.csdn.net/The_Inertia/article/details/105018084
Recomendado
Clasificación