martes, 23 de abril de 2013

Rendimiento de una BD



Técnicas de estimación de rendimiento
Para trabajar con tablas muy grandes debemos tener en cuenta tres claves: Buffers, Índices y Consultas.

Buffers
Un buffer es una ubicación de la memoria reservada para el almacenamiento temporal de información digital. La primera cosa que deberíamos tener muy clara es el hecho de que hay una gran diferencia entre “Datos que están en memoria” y “Datos que no están en memoria”.

Índices
Los índices son usados para encontrar rápidamente los registros que tengan un determinado valor en alguna de sus columnas. Sin un índice, MySql tiene que iniciar una búsqueda por el primer registro y leer toda la tabla para encontrar los registros relevantes.

Consultas
La optimización de las consultas podría ser el punto más extenso de los tres por la gran variedad de posibilidades que tenemos a la hora de optimizar consultas.
Puedes conseguir que MySQL rinda a buen rendimiento con grandes cantidades de datos pero para ello debes tener en cuenta sus limitaciones y saber cuales son las características que ofrecen mejor rendimiento.


Re
ndimiento transaccional

Se debe comprobar que el SGBD puede efectuar la cantidad necesaria de transacciones por unidad de tiempo, para proporcionar a los usuarios un tiempo de respuesta adecuado. En general, este punto es difícil de definir teóricamente. En primer lugar, porque la información necesaria para calcular la carga de transacciones que deberá soportar el sistema, es compleja y difícil de obtener y, en segundo lugar, porque las medidas de transacciones por segundo, que ofrecen los distintos fabricantes, no siempre son comparables.  Además, el rendimiento de un mismo SGBD es ampliamente variable, según las características de la máquina en la que esté instalado (capacidad y velocidad de los discos, cantidad de memoria, potencia de la UCP, etc).  Por todo ello, lo más conveniente es diferir la resolución sobre este punto, hasta que se pueda comprobar experimentalmente realizando una prueba en la propia instalación.  A pesar de lo comentado, existen varias pruebas de rendimiento (benchmark) estándar que ofrecen datos útiles. Los más interesantes para SGBDs, son los del Transaction Processing Performance Council, organismo fundado en 1988, al que pertenecen más de cuarenta fabricantes de plataformas físicas y lógicas de bases de datos, que ha definido especificaciones de benchmarks estándar para sistemas de proceso de transacciones en entornos comerciales.
Técnicas de estimación de respuesta

 El tiempo que tarda una SGBD en procesar una petición se divide en:

1) Tiempo de ejecución de las instrucciones correspondientes, es decir, tiempo de consume del procesador(CPU).

2) Tiempo esperando algún suceso. Aquí puede haber multiples causas, pero las más importantes y comunes son dos:

a) Tiempo de espera de las operaciones de Entrada/Salida, es decir, espera por los accesos de discos.

b) Tiempo de espera por algún recurso que está bloqueado (locked). 

manejo de indices



El índice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla en una base de datos. Al aumentar drásticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes búsquedas.

El índice tiene un funcionamiento similar al índice de un libro, guardando parejas de elementos: el elemento que se desea indexar y su posición en la base de datos. Para buscar un elemento que esté indexado, sólo hay que buscar en el índice dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice.

Tipos de indices

HASH

Hash se refiere a una función o método para generar claves o llaves que representen de manera casi unívoca a un documento, registro, archivo, etc., resumir o identificar un dato a través de la probabilidad, utilizando una función hash o algoritmo hash. Un hash es el resultado de dicha función o algoritmo. Una función de hash es una función para resumir o identificar probabilísticamente un gran conjunto de información, dando como resultado un conjunto imagen finito generalmente menor (un subconjunto de los números naturales por ejemplo).

B-TREE

Los árboles-B ó B-árboles son estructuras de datos de árbol que se encuentran comúnmente en las implementaciones de bases de datos y sistemas de archivos. Los árboles B mantienen los datos ordenados y las inserciones y eliminaciones se realizan en tiempo logarítmico amortizado. La idea tras los árboles-B es que los nodos internos deben tener un número variable de nodos hijo dentro de un rango predefinido. Cuando se inserta o se elimina un dato de la estructura, la cantidad de nodos hijo varía dentro de un nodo. 


Cómo crear los indices en MySQL

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [USING index_type]
    ON tbl_name (index_col_name,...)

index_col_name:
    col_name [(length)] [ASC | DESC]
Ejemplo:

CREATE TABLE lookup (id INT) ENGINE = MEMORY;
CREATE INDEX id_index USING BTREE ON lookup (id);



Cómo crear los indices en Oracle

CREATE [UNIQUE] INDEX index_name
  ON table_name (column1, column2, ... column_n)
  [ COMPUTE STATISTICS ];
Ejemplo:

CREATE INDEX supplier_idx
  ON supplier (supplier_name);

modos de operacion de un SGBD



Rollback: En tecnologías de base de datos, un rollback es una operación que devuelve a la base de datos a algún estado previo. Los Rollbacks son importantes para la integridad de la base de datos, a causa de que significan que la base de datos puede ser restaurada a una copia limpia incluso después de que se han realizado operaciones erróneas.

Commit: En el contexto de la Ciencia de la computación y la gestión de datos, commit (acción de comprometer) se refiere a la idea de consignar un conjunto de cambios "tentativos, o no permanentes". Un uso popular es al final de una transacción de base de datos.

Recovery: El Modo de Recuperación, también conocido como Modelo de Recuperación ó Modo de Registro, es una opción de configuración de base de datos que indica cómo se gestiona el uso del LOG de Transacciones de SQL Server para dicha base de datos (esta opción se configura para cada base de datos de forma independiente).

 Como realizar estas operaciones en MySQL

1) Creamos una tabla

mysql> CREATE TABLE innotest (campo INT NOT NULL PRIMARY KEY) TYPE = InnoDB;
Query OK, 0 rows affected (0.10 sec)

mysql> INSERT INTO innotest VALUES(1);
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO innotest VALUES(2);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO innotest VALUES(3);
Query OK, 1 row affected (0.04 sec)

mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
|     1     |
|     2     |
|     3     |
+-------+
3 rows in set (0.00 sec)


2) Ahora realizamos una transacción


mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO innotest VALUES(4);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
|     1     |
|     2     |
|     3     |
|     4     |
+-------+
4 rows in set (0.00 sec)

Si aplicamos el Rollback los cambios no tendran efecto:

mysql> ROLLBACK;
Query OK, 0 rows affected (0.06 sec)

mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
|     1     |
|     2     |
|     3     |
+-------+
3 rows in set (0.00 sec)

3) Si hacemos una operación commit por lo contrario, los cambios se realizaran:

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO innotest VALUES(4);
Query OK, 1 row affected (0.00 sec)

mysql> COMMIT;
Query OK, 0 rows affected (0.02 sec)

mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
|     1     |
|     2     |
|     3     |
|     4     |
+-------+
4 rows in set (0.00 sec)

Como hacer el recovery:

Backup:mysqldump –host IP_DEL_SERVER –user USUARIO –opt DATABASE -p > BACKUP_NAME(La opción –opt optimiza el proceso de backup y es recomenado su uso)
Restore:mysql –host IP_DEL_SERVER -u USUARIO -p DATABASE < BACKUP_NAME