El complemento ejecuta las senteciss de solo lectura en los esclavos MySQL cofigurados, y
las demás consultas en el maestro MySQL. Una sentencia se
considera de solo lectura si empieza con SELECT
,
con la sugerencia SQL /*ms=slave*/
, o si un esclavo ha sido elegido para
ejecutar la consulta anterior y la consulta empiza con la sugerencia SQL
/*ms=last_used*/
. El los demás casos, la consulta
será enviada al servidor maestro de replicación MySQL. Se recomienda
usar las constantes MYSQLND_MS_SLAVE_SWITCH
,
MYSQLND_MS_MASTER_SWITCH
y MYSQLND_MS_LAST_USED_SWITCH
en lugar de /*ms=slave*/
. Véase también la
lista de constantes de mysqlnd_ms.
Las sugerencias SQL son un tipo especial de comentarios que cumplen el estándar SQL. El complemento revisa cada sentencia en busca de ciertas sugerencias SQL. Las sugerencias SQL están descritas en la documentación de las constantes de mysqlnd_ms, constantes que son exportadas por la extensión. Otros sistemas involucrados en el procesamiento de sentencias, como el servidor MySQL, los cortafuegos SQL, y los proxys SQL, no se ven afectados por las sugerencias SQL, ya que estos sistemas están diseñados para ignorar los comentarios SQL.
El divisor de lectura-escritura interno puede ser reemplazado por un filtro definido por el usuario. Véase también la documentación de filtros de usuario.
Un divisor de lectura-escritura definido por el usuario puede solicitar la lógica interna para enviar una sentencia a una ubicación específica invocando a mysqlnd_ms_is_select().
Nota:
El divisor de lectura-escritura interno no considera las sentencias múltiples. Éstas se ven como una sola sentencia. El divisor comprobará el comienzo de una sentencia para decidir dónde ejecutarla. Si, por ejemplo, una sentencia múltiple comienza con
SELECT 1 FROM DUAL; INSERT INTO test(id) VALUES (1); ...
el complemento la ejecutará en un esclavo aunque la sentencia no sea de solo lectura.