Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: el-brujo en 23 Mayo 2012, 16:34 pm



Título: Consultas SQL para saber key Buffer en MyISAM y Buffer Pol en InnoDB
Publicado por: el-brujo en 23 Mayo 2012, 16:34 pm
Tunning y optimización del fichero

Código:
/etc/my.cnf

¿Cómo puedo saber el  valor exacto y real que que ocupan mis tablas ya sean en MyISAM o InnoDB?

Para saber si usas tablas con el motor InnoDB y cuáles son:

Código
  1. SELECT table_schema, TABLE_NAME
  2. FROM INFORMATION_SCHEMA.TABLES
  3. WHERE engine = 'innodb';

Consulta para convertir una tabla a InnoDB

Código
  1. ALTER TABLE tblname
  2. ENGINE=InnoDB;

Consulta para convertir todas tus tablas InnoDB a MyISAM

Código
  1. SELECT CONCAT('ALTER TABLE ',table_schema,'.',TABLE_NAME,' engine=MyISAM;')
  2. FROM information_schema.TABLES
  3. WHERE engine = 'InnoDB';

Consulta para convertir todas tus tablas MyISAM a InnoDB

Código
  1. SELECT CONCAT('ALTER TABLE ',table_schema,'.',TABLE_NAME,' engine=InnoDB;')
  2. FROM information_schema.TABLES
  3. WHERE engine = 'MyISAM';


MyISAM key cache


Variable:
key_buffer_size =

Código
  1. SELECT CONCAT(ROUND(KBS/POWER(1024,
  2. IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
  3. SUBSTR(' KMG',IF(PowerOf1024<0,0,
  4. IF(PowerOf1024>3,0,PowerOf1024))+1,1))
  5. recommended_key_buffer_size FROM
  6. (SELECT LEAST(POWER(2,32),KBS1) KBS
  7. FROM (SELECT SUM(index_length) KBS1
  8. FROM information_schema.TABLES
  9. WHERE engine='MyISAM' AND
  10. table_schema NOT IN ('information_schema','mysql')) AA ) A,
  11. (SELECT 2 PowerOf1024) B;
  12.  

Ejemplo Resultado:
recommended_key_buffer_size
463M

    (SELECT 0 PowerOf1024) genera resultado en Bytes
    (SELECT 1 PowerOf1024) genera resultado en KB
    (SELECT 2 PowerOf1024) genera resultado en MB
    (SELECT 3 PowerOf1024) genera resultado en GB

Comando shell script:

asumiendo que
datadir=/var/lib/mysql

Código
  1. find /var/lib/mysql -name '*.MYI'|xargs du -shc

InnoDB Buffer Pol


innodb buffer pool

Variable
innodb_buffer_pool_size =

Código
  1. SELECT CONCAT(ROUND(KBS/POWER(1024,
  2. IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
  3. SUBSTR(' KMG',IF(PowerOf1024<0,0,
  4. IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
  5. FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.TABLES
  6. WHERE engine='InnoDB') A,
  7. (SELECT 2 PowerOf1024) B;
  8.  



En KB:

Código
  1. SELECT SUM(data_length+index_length)/POWER(1024,1) IBPSize_KB
  2. FROM information_schema.TABLES WHERE engine='InnoDB';

En MB:

Código
  1. SELECT SUM(data_length+index_length)/POWER(1024,2) IBPSize_MB
  2. FROM information_schema.TABLES WHERE engine='InnoDB';

En GB:

Código
  1. SELECT SUM(data_length+index_length)/POWER(1024,3) IBPSize_GB
  2. FROM information_schema.TABLES WHERE engine='InnoDB';


Más información y ejemplos:
http://wiki.elhacker.net/bases-de-datos/mysql/optimizacion