fragmentación en mysql

Upload: pluisandre706

Post on 27-Feb-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Fragmentacin en MySQL

    1/8

    Fragmentacin en MySQL

    Al utilizar comandos de fragmentado a nivel de tablas, mysqld utiliza una clave departicin y un algoritmo de particionado para determinar la divisin de los datos

    entre los fragmentos. Los algoritmos de fragmentacin que tenemos son:

    RANG: !i la clave de fragmentacin est" dentro de un rango de valores.L#!$: l fragmento es seleccionado de acuerdo a una lista de valores enteros.%A!%: l fragmento se elige de acuerdo a una funcin de &as&.'(: )n algoritmo interno es utilizado por mysqld para elegir como ser"ndistribuidos los datos entre los fragmentos.*+articionado compuesto: Las particiones de RANG y L#!$ pueden sersubfragmentadas usando el fragmentado %A!%, y '(.

    Fragmentado RANGE(Por rango de valores)

    Suponiendo que tenemos la siguiente tabla definida:

    CREATE TABLE empleados (Id_empleado INT NOT NULL,nombre VARCHAR(30) NOT NULL,apelldos VARCHAR(30) NOT NULL,!e"#a_n"o $ATE NOT NULL $E%AULT &'00000&,!e"#a_*ermno $ATE $E%AULT NULL,salaro $ECI+AL (,') NOT NULL,"od-o_de_*raba.o INT NOT NULL,d_alma"enamen*o INT NOT NULL)/

    !uponiendo que queremos almacenar los datos de -- empleados en tres tablasde a -- cada una, procedemos con la siguiente instruccin:

    ALTER TABLE empleadosARTITION B1 RAN2E (d_alma"enamen*o) (ARTITION p0 VALUE LE THAN (0),ARTITION p VALUE LE THAN ('0),ARTITION p' VALUE LE THAN (30),ARTITION p!nal VALUE LE THAN +A4VALUE)/

    sta instruccin utiliza el atributo id/almacenamiento como clave de fragmentado0partition 1ey2, y las particiones son p-, p, p3, y pfinal, en este caso las tresparticiones corresponden a los registros en el rango desde - &asta --, pero laparticin final es en el caso de que quisi4ramos insertar un registro con un valormayor a --, lo cual nos generar5a un error como el siguiente:

  • 7/25/2019 Fragmentacin en MySQL

    2/8

    ERROR 5'6 (H1000)7 Table #as no par**on !or 8al9e 30:

    !i desde la definicin de la tabla queremos especificar un esquema defragmentado, usar5amos la siguiente instruccin:

    CREATE TABLE empleados (Id_empleado INT NOT NULL,nombre VARCHAR(30) NOT NULL,apelldos VARCHAR(30) NOT NULL,!e"#a_n"o $ATE NOT NULL $E%AULT &'00000&,!e"#a_*ermno $ATE $E%AULT NULL,salaro $ECI+AL (,') NOT NULL,"od-o_de_*raba.o INT NOT NULL,d_alma"enamen*o INT NOT NULL)

    ARTITION B1 RAN2E (d_alma"enamen*o) (ARTITION p0 VALUE LE THAN (0),ARTITION p VALUE LE THAN ('0),ARTITION p' VALUE LE THAN (30),ARTITION p!nal VALUE LE THAN +A4VALUE)/

    Fragmentado LIST (Por lista definida)

    !uponiendo que a&ora tenemos la misma tabla, pero lo que queremos es distribuira los empleados de acuerdo a una lista de valores definida, los valores sedistribuiran de acuerdo a los valores definidos en cada lista de cada particin.

    CREATE TABLE empleados (Id_empleado INT NOT NULL,nombre VARCHAR(30) NOT NULL,apelldos VARCHAR(30) NOT NULL,!e"#a_n"o $ATE NOT NULL $E%AULT &'00000&,!e"#a_*ermno $ATE $E%AULT NULL,salaro $ECI+AL (,') NOT NULL,"od-o_de_*raba.o INT NOT NULL,d_alma"enamen*o INT NOT NULL)

    ARTITION B1 LIT (d_alma"enamen*o) (ARTITION 9res*e VALUE IN(,',3,;,5,6,

  • 7/25/2019 Fragmentacin en MySQL

    3/8

    (3',3;,35,;',;3,;=,5,6,6',63,

  • 7/25/2019 Fragmentacin en MySQL

    4/8

    realiza no por el R=>! propiamente sino por el administrador o programador.

    La implementacin de este tipo de fragmentacin es guardando el mismoidentificador del registro en las dos tablas y los atributos en su tablacorrespondiente, o partiendo de un con?unto de datos estaticos, donde una tabla

    ya definida y con sus registros se divide mediante algun procedimientoalmacenados.La me?or practica, en mi opinin personal es usar la primera forma, que dependem"s de un programador.

    Creacion de una Replicacion en MySQLCreacion de Replicacion

    Para la creacin de una replicacin enMySQL, no requerimos mas que detres sencillos pasos:

    1.-Creacion de las cuentas de replicacion en cada servidor.2.- Coni!urar el maestro y el esclavo.".- #acer la cone$in del esclavo y que replique del maestro.

    Creacion de las cuentas de replicacion en cada servidor.

    Primero, para este paso, %ay que mencionar que el usuario de lareplicacin, tiene al!unos privile!ios especiales ya que el procedimientose reali&a mendiante una cone$ion 'CP()P, y %ace un uso del arc%ivo delo! del maestro, por lo que se requiere crear uno con la si!uienteinstruccin:

    mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*

    -> TOusuario_replicacion@'192.168.0.%' IDENTIFIED BY 'contrasenia';

    donde:

    usuario_replicaciones el nombre del usuario que tendra nuestro esclavo de la

    replicacin.

    contraseniala palabra de acceso para nuestra cuenta

  • 7/25/2019 Fragmentacin en MySQL

    5/8

    Esta cuenta se debe crear tanto en el esclavo como en el maestro. Y la cuenta

    esta restringida a la red local, debido a que supone un riesgo a la seguridad si sale

    a una red publica.

    Configurando el Maestro y el Esclavo

    Ahora, lo que necesitamos hacer es habilitar el Registro Binario ( log ), en el

    servidor maestro, esto lo haremos editando el archivomy.inien windows omy.cnf

    en unix, agregando las siguientes lineas despues de mysqld en dicho archivo.

    log_bin = mysql-bin

    server_id = 10

    una ve& %ec%o esto necesitamos reiniciar el *+MS y comproar que elre!istro se %a %ailitado mediante el comando:

    mysql> SHOW MASTER STATUS;

    +-------------------+----------+---------------+--------------------+

    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +-------------------+----------+---------------+--------------------+

    | mysql-bin.000001 | 98 | | |

    +-------------------+----------+---------------+--------------------+

    1 row in set (0.00 sec)

    hecho esto, editamos el archivomy.iniomy.cnfen el esclavocon las siguientes

    instrucciones:

    log_bin = mysql-bin

    server_id = 2

    relay_log = mysql-relay-bin

    log_slave_updates = 1

    read_only = 1

    e igualmente se reinicia el servidoresclavo.

    Iniciar el esclavo

    El siguiente paso es decirle a esclavo como conectarse al maestro y comenzar la

  • 7/25/2019 Fragmentacin en MySQL

    6/8

    replicacion de sus registros binarios (logs).A partir de este momento ya no es

    necesario editar el archivo my.ini y usar el comando CHANGE MASTER TO esta

    sentencia edita dicho archivo. Y la sentencia para iniciar lareplicacion es:

    mysql>CHANGE MASTER TO MASTER_HOST='server1',-> MASTER_USER='usuario_replicacion',

    -> MASTER_PASSWORD='contrasenia',

    -> MASTER_LOG_FILE='mysql-bin.000001',

    -> MASTER_LOG_POS=0;

    los datos igual como antes, son los correspondientes al usaurio de la replicacion

    en el maestro, y su contrasea, y el archivo de replicacion debe ser el del log que

    habilitamos o que vimos en el SHOW MASTER STATUS, y el MASTER LOG es

    para que despues de haber realizado la replicacion podamos visualizar el estadodel esclavo.

    mysql>SHOW SLAVE STATUS\G

    *************************** 1. row ***************************

    Slave_IO_State:

    Master_Host: server1

    Master_User: repl

    Master_Port: 3306

    Connect_Retry: 60Master_Log_File: mysql-bin.000001

    Read_Master_Log_Pos: 4

    Relay_Log_File: mysql-relay-bin.000001

    Relay_Log_Pos: 4

    Relay_Master_Log_File: mysql-bin.000001

    Slave_IO_Running: No

    Slave_SQL_Running: No

    ...omitted...

    Seconds_Behind_Master: NULL

    y finalmente el comando para iniciar la replicacion es (chaca-cha-chan):

    mysql>START SLAVE;

  • 7/25/2019 Fragmentacin en MySQL

    7/8

    Muchas veces estamos buscando una forma de acelerar las consultas a nuestra base de

    datos MySQL, pero en MySQL nosotros podemos habilitar la cache de consultas para

    aumentar el rendimiento del servidor de base datos MySQL. Cada vez que la cache de

    consultas est activada, esta puede cachear o mantener la consulta en la memoria

    incrementando de esta forma el rendimiento.

    Como sabemos, la velocidad es siempre el elemento ms importante en el desarrollo de

    un sitio web especialmente para aquellos de alto trco de datos impulsados por p!inas

    web. "sted puede probar a su vez con la activaci#n de cach$ de consultas para acelerar la

    consulta.

    %ara acelerar una consulta se debe habilitar la cache de consulta MySQL, pero antes es

    necesario modicar al!unas variables en el archivo de con!uraci#n del servidor MySQL

    &usualmente es my.cnf o my.ini'()* +ebe establecer query_cache_typea ) &hay tres posibles opciones( &deshabilitado -

    o', ) &habilitado - on' y / &ba0o solicitud'.

    >9er?"a"#e*?pe @

    /* +ebe establecer el tama1o de query2cache2size al que usted desee. %or lo !eneral con

    /M3 es un valor normal.

    >9er?"a"#ese @ '0+

    Si usted establece una cache de consulta 4query5cache5type6 7 / &ba0o demanda', usted

    tendr que modicar sus consultas SQL &.sql', para que soporten la consultas de cache.

    S8L8C9 SQL2C:C;8 eld), eld/ M table) ?;8=8 eld@ 7 AyesB

    %ara vericar si su servidor MySQL tiene habilitada la consulta cache, es suciente

    e0ecutar la si!uiente consulta(

    HO VARIABLE LIE D>9er?_"a"#eF/

    "sted debera ver un resultado de este estilo(

    DEE5DED

    F Gariable2name F Galue F

    DEE5DED

    F have2query2cache F H8S F

    F query2cache2limit F )IJK F

    F query2cache2size F /N)K/ F

    F query2cache2type F >O F

    DEE5DED

    I rows in set &./ sec'

  • 7/25/2019 Fragmentacin en MySQL

    8/8

    %ara vericar si consulta de cache MySQL est funcionando simplemente realice una

    consulta SQL dos veces y verique la cache de mysql, se realice con el si!uiente comando

    deba0o(

    HO TATU LIE D>"a"#eF/

    DEEEDE5DF Gariable2name F Galue F

    DEEEDE5D

    F Qcache2queries2in2cache F ) F

    F Qcache2inserts F @ F

    F Qcache2hits F F

    F Qcache2lowmem2prunes F F

    F Qcache2not2cached F / F

    F Qcache2free2memory F /NIKN/ F

    F Qcache2free2blocPs F ) F

    F Qcache2total2blocPs F I F

    DEEEDE5D

    La primera vez que se e0ecuta una consulta a MySQL es normal que lleve un poco ms de

    tiempo, pero la se!unda vez ser ms rpida en comparaci#n con el primer tiempo de

    consulta, y eso implica que la cache de consulta mysql est funcionando correctamente.