Bienvenidos sean a este post, hoy veremos unas formas practicas de obtener la informacion de las particiones.
Mariadb nos provee muchas formas de obtener informacion de las particiones, con el metodo SHOW TABLE STATUS si miramos en su salida la columna Create_options nos devolvera toda la informacion de las particiones, pero la forma mas facil de obtener la informacion y que pueda ser leida por nosotros es a traves de la instruccion SHOW CREATE TABLE, al igual que en todos los temas que vimos hasta ahora existe una tabla llamada PARTITIONS en la base information_schema la cual contiene toda la informacion de las particiones, a su vez las tablas subparticionadas tienen una fila para cada subparticion, otras tablas tienen una fila para cada particion, como podran deducir algunas columnas son similares a la tabla TABLES pero aqui nombraremos a las mas relevantes:
- PARTITION_METHOD, describe el tipo de particionamiento, este valor se repite por cada particion en la misma tabla
- PARTITION_EXPRESSION, describe la expresion de particionamiento, tambien se repite por cada particion en la misma tabla
- PARTITION_NAME, describe el nombre de la particion
- PARTITION_ORDINAL_POSITION, describe la posicion de la subparticion comenzando desde 1
Veamos las columnas para las subparticiones:
- SUBPARTITION_METHOD, idem a PARTITION_METHOD
- SUBPARTITION_EXPRESSION, idem a PARTITION_EXPRESSION
- SUBPARTITION_NAME, idem a PARTITION_NAME
- SUBPARTITION_ORDINAL_POSITION, idem a PARTITION_ORDINAL_POSITION
Vamos a ver el siguiente query de ejemplo:
MariaDB [information_schema]> SELECT
-> CONCAT(PARTITION_NAME, '.', SUBPARTITION_NAME) AS SUBPARTITION_NAME,
-> SUBPARTITION_ORDINAL_POSITION
-> FROM information_schema.PARTITIONS
-> WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'article';
+-------------------+-------------------------------+
| SUBPARTITION_NAME | SUBPARTITION_ORDINAL_POSITION |
+-------------------+-------------------------------+
| p0.p0sp0 | 1 |
| p0.p0sp1 | 2 |
| p1.p1sp0 | 1 |
| p1.p1sp1 | 2 |
+-------------------+-------------------------------+
4 rows in set (0.00 sec)
En este caso podemos observar como primero concatenamos los nombres de la particion con el nombre de la subparticion y luego obtenemos el ordinal de cada subparticion, para la tabla article que estuvimos viendo de ejemplo, observen como para subparticion de cada particion siempre comienza de 1 tal como mencionamos anteriormente, ahora si una tabla particionada no es de InnoDB y al momento de crearla la variable @@innodb_file_per_table tiene el valor ON cada particion o subparticion sera escrita en diferentes espacios de tabla, esto significa que las mismas seran visibles en la tabla INNODB_SYS_TABLESPACES de la base information_schema, la unica diferencia para los espacios de tabla de las tablas es el formato del nombre veamos un ejemplo de sintaxis:
<db>/<tabla>#P#<nombre_part>
<db>/<tabla>#P#<nombre_part>#SP#<nombre_part><nombre_subpart>
Nota: Si toman los datos del ejemplo anterior y lo bajan a esta sintaxis se daran cuenta a simple vista como es.
De lo comentado anteriormente consideremos el siguiente query como un ejemplo:
MariaDB [information_schema]> SELECT *
-> FROM information_schema.INNODB_SYS_TABLESPACES
-> WHERE NAME LIKE 'test/article#P#p1#%' \G
*************************** 1. row ***************************
SPACE: 748
NAME: test/article#P#p1#SP#p1sp0
FLAG: 0
FILE_FORMAT: Antelope
ROW_FORMAT: Compact or Redundant
PAGE_SIZE: 16384
ZIP_PAGE_SIZE: 0
*************************** 2. row ***************************
SPACE: 749
NAME: test/article#P#p1#SP#p1sp1
FLAG: 0
FILE_FORMAT: Antelope
ROW_FORMAT: Compact or Redundant
PAGE_SIZE: 16384
ZIP_PAGE_SIZE: 0
2 rows in set (0.00 sec)
En resumen, hoy hemos visto unas de las formas de poder obtener informacion de nuestras particiones, algunas variantes interesantes de como pueden quedar registradas, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
