9.4. Variables de sistema

MySQL 5.0

9.4. Variables de sistema

MySQL proporciona acceso a muchas variables de sistema y de conexión. Muchas variables pueden modificarse dinámicamente mientras el servidor se está ejecutando. Esto a menudo permite variar la operación del servidor sin tener que detenerlo y reiniciarlo.

El servidor mysqld mantiene dos clases de variables. Las variables globales afectan la operación general del servidor. Las variables de sesión actúan sobre la operación en conexiones de clientes individuales.

Cuando el servidor arranca, inicializa todas las variables globales a sus valores predeterminados. Estos valores pueden ser modificados por opciones especificadas en ficheros de opciones o en la línea de comandos. Luego de que el servidor se inicia, las variables globales pueden ser modificadas dinámicamente conectándose y emitiendo una sentencia . Para cambiar una variable global debe tenerse el privilegio .

El servidor también mantiene un conjunto de variables de sesión para cada cliente que se conecta. Las variables de sesión de cliente se inicializan al momento de conectarse, empleando el valor actual de la correspondiente variable global. Las variables de sesión dinámicas pueden ser modificadas por el cliente mediante una sentencia . No se requieren privilegios especiales para establecer el valor una variable de sesión, pero un cliente puede modificar solamente sus propias variables, no las de otros clientes.

Un cambio en una variable global es visible para cualquier cliente que acceda esa variable. Sin embargo, afectará solamente a las correspondientes variables de sesión de las conexiones que se realicen luego del cambio. No afectará las variables de sesión de los clientes actualmente conectados (ni siquiera las del cliente que emitió la sentencia ).

Los valores de las variables globales y de sesión pueden establecerse y recuperarse usando varias sintaxis diferentes. Los siguientes ejemplos están basados en la variable .

Para establecer el valor de una variable , debe emplearse una de las siguientes sintaxis:

mysql> SET GLOBAL sort_buffer_size=;
mysql> SET @@global.sort_buffer_size=;

Para establecer el valor de una variable , debe emplearse una de las siguientes sintaxis:

mysql> SET SESSION sort_buffer_size=;
mysql> SET @@session.sort_buffer_size=;
mysql> SET sort_buffer_size=;

es un sinónimo de .

Si al establecer el valor de una variable no se utiliza , , o , por defecto se asume . Consulte Sección 13.5.3, “Sintaxis de .

Para recuperar el valor de una variable debe utilizarse una de las siguientes sentencias:

mysql> SELECT @@global.sort_buffer_size;
mysql> SHOW GLOBAL VARIABLES like 'sort_buffer_size';

Para recuperar el valor de una variable debe utilizarse una de las siguientes sentencias:

mysql> SELECT @@sort_buffer_size;
mysql> SELECT @@session.sort_buffer_size;
mysql> SHOW SESSION VARIABLES like 'sort_buffer_size';

Aquí, también, es un sinónimo de .

Cuando se recupera una variable con (o sea, no se especifica , , o ), MySQL devuelve el valor de si existe y el valor en otro caso.

En el caso de , si no se especifica , , o , MySQL devuelve los valores de .

La razón por la que la palabra clave se requiere para establecer el valor de variables que solamente existen como pero no para recuperar dicho valor, es para prevenir futuros problemas. Si se elimina una variable con el mismo nombre que una variable , un cliente con el privilegio podría cambiar accidentalmente la variable en lugar de hacerlo solamente sobre la variable de su propia conexión. Si se agrega una variable con el mismo nombre que una , un cliente que intentase modificar la variable podría encontrarse con que sólo se ha modificado su propia variable .

Puede encontrarse mayor información acerca de las opciones de inicio del sistema y de las variables de sistema en Sección 5.3.1, “Opciones del comando mysqld y Sección 5.3.3, “Variables de sistema del servidor”. Una lista de las variables que pueden establecerse en tiempo de ejecución se brinda en Sección 5.3.3.1, “Variables de sistema dinámicas”.

9.4.1. Variables estructuradas de sistema

MySQL 5.0 también soporta variables de sistema estructuradas. Una variable estructurada difiere de una variable de sistema convencional en dos aspectos:

  • Su valor es una estructura con componentes que especifican parámetros de servidor que se consideran estrechamente relacionados.

  • Pueden existir varias instancias de un determinado tipo de variable estructurada. Cada una tiene un nombre diferente y se refiere a un recurso mantenido por el servidor.

Actualmente, MySQL soporta un solo tipo de variable estructurada. Éste especifica parámetros que regulan el funcionamiento de los cachés de claves (key caches). Una variable estructurada de caché de claves tiene estos componentes:

Esta sección describe la sintaxis para referirse a variables estructuradas. Para los ejemplos de sintaxis se emplean variables de caché de claves, pero los detalles específicos sobre cómo funcionan los cachés de claves se encuentran en Sección 7.4.6, “La caché de claves de .

Para referirse a un componente de una instancia de una variable estructurada, se emplea un nombre compuesto con el formato . Ejemplos:

hot_cache.key_buffer_size
hot_cache.key_cache_block_size
cold_cache.key_cache_block_size

Siempre hay predefinida una instancia con el nombre para cada variable de sistema estructurada. Si se hace referencia a un componente de una variable estructurada sin mencionar el nombre de instancia, se utiliza . Por lo tanto, y se refieren a la misma variable de sistema.

Las reglas para la denominación de instancias y componentes pertenecientes a variables estructuradas son las siguientes:

  • Para un determinado tipo de variable estructurada, cada instancia debe tener un nombre que sea único dentro de ese tipo de variable. Sin embargo, los nombres de instancia no necesitan ser únicos a través de distintos tipos de variable estructurada. Por ejemplo, cada variable estructurada tiene una instancia llamada , así que no es único a través de distintos tipos de variable.

  • Los nombres de los componentes de cada tipo de variable estructurada deben ser únicos a través de todos los nombres de variables de sistema. Si esto no fuese así (o sea, si dos tipos diferentes de variable estructurada compartiesen nombres de miembros), no sería posible determinar la variable estructurada por defecto a emplear cuando un nombre de miembro no estuviese precedido por un nombre de instancia.

  • Si un nombre de instancia de variable estructurada no fuese legal al usarlo como identificador sin delimitar, habrá que referirse a él delimitándolo con acentos graves (ASCII 96). Por ejemplo, no es un nombre legal, pero lo es.

  • , , y no son nombres legales de instancia. Esto evita conflictos con notaciones del tipo , que se utilizan para hacer referencias a variables de sistema no estructuradas.

Actualmente, las primeras dos reglas no tienen posibilidad de ser infringidas, porque el único tipo de variable estructurada es el empleado para cachés de claves. Estas reglas cobrarán mayor significado si en el futuro se crean otros tipos de variable estructurada.

Con una excepción, se puede hacer referencia a los componentes de una variable estructurada utilizando nombres compuestos en cualquier contexto en que puedan aparecer nombres simples de variable. Por ejemplo, se puede asignar un valor a una variable estructurada empleando una opción de línea de comandos:

shell> mysqld --hot_cache.key_buffer_size=64K

En un fichero de opciones, se utilizaría:

[mysqld]
hot_cache.key_buffer_size=64K

Si se inicia el servidor con esta opción, crea un caché de claves llamado con un tamaño de 64KB adicionalmente al caché por defecto, que tiene un tamaño predeterminado de 8MB.

Suponiendo que se inicie el servidor de esta manera:

shell> mysqld --key_buffer_size=256K \
         --extra_cache.key_buffer_size=128K \
         --extra_cache.key_cache_block_size=2048

En este caso, el servidor establece el tamaño del caché de claves pedeterminado a 256KB. (También se podría haber escrito .) Adicionalmente, el servidor crea un segundo caché llamado con un tamaño de 128KB, y fija un tamaño de 2048 bytes para los buffers de bloque destinados al caché de bloques de índice de tablas.

El siguiente ejemplo inicia el servidor con tres diferentes cachés de claves, manteniendo sus tamaños en una proporción de 3:1:1:

shell> mysqld --key_buffer_size=6M \
         --hot_cache.key_buffer_size=2M \
         --cold_cache.key_buffer_size=2M

Los valores de las variables estructuradas también pueden establecerse y leerse en tiempo de ejecución. Por ejemplo, para establecer a 10MB el tamaño de un caché de claves llamado , pueden emplearse cualquiera de estas sentencias:

mysql> SET GLOBAL hot_cache.key_buffer_size = 10*1024*1024;
mysql> SET @@global.hot_cache.key_buffer_size = 10*1024*1024;

Para obtener el tamaño del caché, se realiza lo siguiente:

mysql> SELECT @@global.hot_cache.key_buffer_size;

Sin embargo, las siguientes sentencias no funcionarán. La variable no es interpretada como un nombre compuesto, sino como una cadena proporcionada a para buscar coincidencias con un patrón.

mysql> SHOW GLOBAL VARIABLES LIKE 'hot_cache.key_buffer_size';

Esta es la excepción mencionada sobre la posibilidad de utilizar en cualquier sitio un nombre de variable estructurada del mismo modo que se hace con una variable simple.