Serie PECL/mysqlnd_ms 1.5

1.5.1-stable

  • Fecha de publicación: 06/2013
  • Motivo/tema: Soporte para fragmentación, soporte mejorado para transacciones

Nota:

Esta es la serie estble actual. Use esta versión en entornos de producción.

La documentación está completa.

1.5.0-alpha

  • Fecha de publicación: 03/2013
  • Motivo/tema: Soporte para fragmentación, soporte mejorado para transacciones

Corrección de errores

  • Corregida la violación de acceso #60605 de PHP cuando mysqlnd_ms está habilitado.

  • Establecer la adhesión de transacciones deshabilita todo el equilibrado de carga, incluyendo lla tolerancia a fallos automática, durante una transacción. Por lo que podrían ocurrir intercambios de conexiones en mitad de una transacción en configuraciones multimaestro y durante la tolerancia a fallos automática aunque la monitorización de transacciones haya detectado los límites de la transacción apropiadamente.

  • Rotura de RC y error corregido. Las sugerencias SQL que fuerzan a un tipo específico de servidor (MYSQLND_MS_MASTER_SWITCH, MYSQLND_MS_SLAVE_SWITCH, MYSQLND_MS_LAST_USED_SWITCH) son ignoradas durante una transacción si la adhesión de transacciones está habilitada y se han detectado apropiadamente los límites de la transacción.

    Este es un cambio de comportamiento. Sin embargo, también es una corrección de error y un paso para alinear comportamiento. Si, en versiones anteriores, con adhesión de transacciones, se combinaba una de las sugerencias SQL enumeradas el filtro de calidad de servicio, podía ocurrir que dichas sugerencias fueran ignoradas. En algún caso, las sugerencias SQL funcionaban, en otros no. El nuevo comportamiento es más consistente. Las sugerencias SQL siempre serán ignoradas durante una transacción si la adhesión de transacciones está habilitado.

    Observe que la detección de los límites de transaccoines continua basándose en la monitorización de llamadas a la API. Los comandos SQL que controlan transacciones no son monitorizados.

  • Rotura de RC y error corregido. Las llamadas a mysqlnd_ms_set_qos() fallarán cuando se hacen en mitad de una transacción si la adhesión de transacciones está habilitada. Los intercambios de conexión no están permitidos durante una transacción. El cambio de la calidad de servicio probablemente resulta en un conjunto diferente de servidores elegidos para la ejecución de consultas, posiblemente haciendo necesario intercambiar conexiones. Así, la llamada no está permitida durante una transacción activa. La calidad de servicio puede ser, sin embargo, cambiada entre transacciones.

Cambios en las características

  • Se introdujo el filtro node_group. El filtro permite organizar servidores (maestro y esclavos) en grupos. Las consultas se pueden dirigir a ciertos grupos de servidores prefijando la sentencia de consulta con una sugerencia/comentario de SQL que contenga el nombre de configuración de grupos. La agrupación se puede usar para particionar y fragmentar, aunque también para optimizar la caché local. En el caso de la fragmentación, se ha de pensar en un nombre grupo como una clave fragmentada. Todas las consultas para una clave fragmentada dada serán ejecutadas en el fragmento configurado. Nota: tanto el cliente como el servidor deben sorportar la fragmentación para usar la misma con mysqlnd_ms.

  • Validación del fichero de configuración extendida durante el arranque de PHP (RINIT). Se lanzará un error de nivel E_WARNING si no se puede leer el fichero de configuración (permisos), si está vacío, o si el fichero (JSON) no se pudo analizar. Las advertencias podrían aparecer el ficheros log, lo que depende de cómo esté configurado PHP.

    Las distribuciones que pretenden proporcionar una configuración precofigurada, incluyendo una rutina auxiliar de fichero de configuración, se les interroga para colocar {} en el fichero de configuración para evitar esta advertencia sobre un fichero de configuración inválido.

    Se realiza una validación extra del fichero de configuración cuando se analizan secciones que abran una conexión. Por favor, observe que aún podrían haber situaciones en las que un fichero de configuración del complemento inválido no conduzca a mensajes de error apropiados, sino a un fallo de conexión.

  • A partir de PHP 5.5.0, se añadió la mejora de la detección de límites de transacciones para mysqli. La extensión mysqli ha sido modificada para usar las nuevas llamadas a la API en C de la biblioteca mysqlnd para comenzar, consolidar y revertir una transacción o un punto de prevención. Si se usa trx_stickiness para habilitar transacciones que consideran equilibrado de carga, las funciones mysqli_begin(), mysqli_commit() and mysqli_rollback() ahora serán monitorizadas por el complemento, para aceptar la función mysqli_autocommit() que ya estaba admitida. Todas las características de SQL para controlar transacciones también están disponibles a través de las funciones mejoradas relacionadas con el control de transacciones de mysqli. Esto significa que no es necesario para emitir sentencias SQL en lugar de usar llamadas a la API. Las aplicaciones que utilicen las llamadas apropiadas a la API pueden ser equilibradas en carga por PECL/mysqlnd_ms de una manera completamente consciente de transacciones.

    Observe que PDO_MySQL no ha sido actualizada aún para usar las nuevas llamadas a la API de mysqlnd. Por lo tanto, la detección de límites de transacciones con PDO_MySQL continua estando limitada a la monitorización pasando PDO::ATTR_AUTOCOMMIT a PDO::setAttribute().

  • Se introdujo trx_stickiness=on. Esta opción de trx_stickiness difiere de trx_stickiness=master en que intenta ejecutar una transacción de solo lectura en un esclavo, si la calidad de servicio (nivel de consistencia) permite el uso de un esclavo. Las transacciones de solo lectura fueron introducidas en MySQL 5.6 y ofrecen ganancias de rendimiento.

  • El soporte para la caché de consultas se considera beta si se usa con la API de mysqli. Debería funcionar bien con clústeres basados en copia primaria. Para las demás API, este rasgo continua siendo experimental.

  • Los ejemplos de código del fichero fuente de mysqlnd_ms se actualizaron.