BDB

Revisión del 10:43 23 nov 2011 de Jessica0302ad jc.hlg (discusión | contribuciones) (Página creada con '{{Ficha Software |nombre= BDB (BekerleyDB) |familia= |imagen= BekerleyDB.jpeg |tamaño= |descripción= Motor de almacenamiento de MySQL |sistemas operativos= Linux, [[Sun S...')
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
BDB (BekerleyDB)
Información sobre la plantilla
BekerleyDB.jpeg
Motor de almacenamiento de MySQL
Sistemas Operativos compatiblesLinux, Sun Solaris, Windows, SCO UnixWare, SCO OpenServer, IBM AIX, FreeBSD
LicenciaGNU
Sitio web
http://dev.mysql.com/doc/refman/5.0/es/bdb-storage-engine.html

BDB (BekerleyDB): Sleepycat Software ha proporcionado a MySQL el motor de almacenamiento transaccional Berkeley DB. A este motor de almacenamiento se le llama tradicionalmente BDB. Se incluye soporte para BDB en distribuciones fuentes de MySQL y en distribuciones binarias MySQL-Max.

Características

BDB (BerkeleyDB) es un motor de almacenamiento que fue desarrollado originalmente en la UC Berkeley. Ahora es mantenido por Sleepycat Software Inc., que es una empresa de Oracle actualmente. BDB es transacción segura, y se ha utilizado en los productos de muchas compañías, como Cisco Systems.

BDB no es el motor de almacenamiento por defecto. Debe especificarse "ENGINE = BDB" al final de la "CREATE TABLE”, declaración para crear nuevas tablas con el motor de almacenamiento BDB.

Las tablas BDB pueden tener una gran probabilidad de sobrevivir a fallos del sistema y ser capaces de realizar COMMIT y ROLLBACK en transacciones. La distibución fuente MySQL incluye una distribución BDB preparada para funcionar con MySQL, no puede usar una versión de BDB no preparada para funcionar con el mismo.

Sistemas operativos soportados

Sistemas operativos no soportados

Opciones de arranque

Las siguientes opciones de mysqld pueden usarse para cambiar el comportamiento del motor de almacenamiento BDB:

--bdb-home=path: Directorio base para tablas BDB . Debe ser el mismo directorio para usar --datadir.

--bdb-lock-detect=method: El método de bloqueo BDB . El valor debe ser DEFAULT, OLDEST, RANDOM, o YOUNGEST.

--bdb-logdir=path: El directorio del fichero de log BDB.

--bdb-no-recover: No arranca Berkeley DB en modo recuperación.

--bdb-no-sync : No vuelca síncronamente los logs BDB . Esta opción está obsoleta; puede usarse --skip-sync-bdb-logs en su lugar.

--bdb-shared-data : Arranca Berkeley DB en modo multi proceso. (No usar DB_PRIVATE al inicializar Berkeley DB)

--bdb-tmpdir=path : El directorio de ficheros temporales de BDB.

--skip-bdb : Desactiva el motor de almacenamiento BDB.

--sync-bdb-logs: Vuelca síncronamente los logs BDB. Esta opción está activada por defecto ; usar --skip-sync-bdb-logs para desactivarla.

Características de las tablas

Cada tabla BDB se almacena en disco en dos ficheros. Los ficheros tienen nombres que comienzan con el nombre de la tabla y tienen una extensión para indicar el tipo de fichero. Un fichero .frm almacena la definición de tabla, y un fichero .db contiene los datos de tabla e índices.

Para especificar explícitamente que quiere una tabla BDB, se debe indicar con la opición de tabla ENGINE o TYPE:

CREATE TABLE t (i INT) ENGINE = BDB;

CREATE TABLE t (i INT) TYPE = BDB;

BerkeleyDB es sinónimo de BDB en la opción ENGINE o TYPE .

El motor de almacenamiento BDB proporciona tablas transaccionales. La forma para usar estas tablas depende del modo autocommit:

  • Si está el autocommit activado (por defecto), los cambios en las tablas BDB se efectúan inmediatamente y no pueden deshacerse.
  • Si está el autocommit desactivado, los cambios no son permanentes hasta que se ejecute un comando COMMIT . En lugar de hacer un commit se puede ejecutar ROLLBACK para olvidar los cambios.
  • Se puede comenzar una transacción con el comando BEGIN WORK para suspender autocommit, o con SET AUTOCOMMIT=0 para desactivar autocommit explícitamente.

Características de BDB

El motor de almacenamiento BDB tiene las siguientes características:

  • En MySQL 5.0, las tablas BDB pueden tener hasta 31 índices por tabla, 16 columnas por índice, y un máximo de tamaño de clave de 1024 bytes.
  • MySQL necesita una PRIMARY KEY en cada tabla BDB para que cada registro pueda identificarse unívocamente. Si no se crea una explícitamente, MySQL la crea y mantiene una PRIMARY KEY oculta. La clave oculta tiene una longitud de 5 bytes y se incrementa para cada intento de inserción. Esta clave no aparece en la salida de SHOW CREATE TABLE o DESCRIBE.
  • La PRIMARY KEY es más rápida que cualquier otro índice, ya que la PRIMARY KEY se almacena junto con los datos. Los otros índices se almacenan como los datos claves + la PRIMARY KEY, por lo que es importante que se mantenga la PRIMARY KEY tan pequeña como sea posible para ahorrar espacio en disco y tener más velocidad.
  • Este comportamiento es similar al de InnoDB, donde las claves primarias pequeñas ahorran espacio no sólo en el índice primario sino también en índices secundarios.
  • Si todas las columnas a las que accede en una tabla BDB son parte del mismo índice o parte de la clave primaria, MySQL puede ejcutar la consulta sin tener que acceder al registro. En una tabla MyISAM , esto sólo puede hacerse si las columnas son parte del mismo índice.
  • El escaneo secuencial es más lento que para tablas MyISAM ya que los datos en tablas BDB se almacena en B-trees y no en un fichero de datos separado.
  • Los valores clave no tienen compresión de prefijo ni sufijo como los valores clave en tablas MyISAM por lo que la información clave ocupa más espacio en tablas BDB en comparación con MyISAM .
  • A menudo hay huecos en la tabla BDB que le permiten insertar nuevos registros en medio del árbol índice. Esto hace que las tablas BDB sean algo más grandes que las MyISAM.
  • SELECT COUNT(*) FROM tbl_name es lento para tablas BDB , ya que no se mantiene conteo de registros en la tabla.
  • El optimizador necesita saber el número aproximado de registros en la tabla. MySQL resuelve esto contando inserciones y manteniendo esto en un segmento separado en cada tabla BDB . Si no realiza muchos comandos DELETE o ROLLBACK , este número debe ser lo bastante adecuado para el optimizador MySQL . Sin embargo, MySQL almacena el número sólo al cerrar, así que puede ser incorrecto si el servidor termina inesperadamente. Puede que no sea fatal incluso si este número no es 100% correcto.
  • Bloqueo interno en tablas BDB se realiza a nivel de páginas.
  • LOCK TABLES funciona en tablas BDB como con otras tablas. Si no se usa LOCK TABLES, MySQL realiza un bloqueo interno de múltiple escritura en la tabla (un bloqueo que no bloquea otros escritores) para asegurar que la tabla está bloqueada apropiadamente si otro flujo realiza un bloqueo de tabla.
  • Para poder deshacer transacciones, el motor de almacenamiento BDB mantiene ficheros de log. Para máximo rendimiento se puede usar la opción --bdb-logdir para guardar los logs BDB en un disco distinto al que tiene las bases de datos.
  • MySQL realiza un checkpoint cada vez que se comienza un nuevo fichero log BDB , y borra cualquier fichero de log BDB no necesario para transacciones actuales. Se puede usar FLUSH LOGS en cualquier momento para hacer un checkpoint de tablas Berkeley DB.
  • Para recuperación de desastres, debe usar copias de seguridad de tablas más el log binario de MySQL.

Limitaciones en las tablas BDB

La siguiente lista muestra restricciones a tener en cuenta al usar tablas BDB:

  • Cada tabla BDB almacena en el fichero .db la ruta al fichero como si se hubiera creado. Esto se hizo para ser capaz de detectar bloqueos en un entorno multi usuario que soporte enlaces simbólicos. Como consecuencia, no es posible mover ficheros de tablas BDB de un directorio de base de datos a otro.
  • Al hacer copias de seguridad de tablas BDB, se debe usar mysqldump o hacer una copia de seguridad que incluya los ficheros para cada tabla BDB (los ficheros .frm y .db ) así como los ficheros de log BDB . El motor de almacenamiento BDB almacena transacciones no acabadas en su log y las necesita cuando arranca mysqld . Los logs BDB son los ficheros en el directorio de datos con nombres de la forma log.XXXXXXXXXX (10 dígitos).
  • Si una columna que permite valores NULL tiene un índice único, sólo se permite un valor NULL. Esto difiere de otros motores de almacenamiento.

Errores

Errores que pueden darse en el uso de tablas BDB:

Si ocurre el siguiente error cuando arranca mysqld tras actualizar, significa que la nueva versión BDB no soporta el antiguo formato de log:

bdb: Ignoring log file: .../log.XXXXXXXXXX: unsupported log version #

En este caso, se debe borrar todos los logs BDB de su directorio de datos (los fichero con nombres que tienen el formato log.XXXXXXXXXX) y reiniciar mysqld. También se recomienda usar mysqldump --opt para volcar las tablas BDB , se debe borrar las tablas, y restaurar las del fichero de volcado.

Si el modo autocommit está desactivado y borra una tabla BDB referenciada por otra transacción, se puede obtener un mensaje de error de la siguiente forma en el log de error MySQL:

001119 23:43:56 bdb: Missing log fileid entry

001119 23:43:56 bdb: txn_abort: Log undo failed for LSN:1 3644744: Invalid

Se recomienda no borrar tablas BDB excepto con el modo autocommit activado.

Fuente