Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Типы таблиц MySQL /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Таблицы BDB или Berkeley_DB - Программирование от RIN.RU
Таблицы BDB или Berkeley_DB



Характеристики таблиц BDB


  • Чтобы обеспечить возможность отката транзакций, для таблиц BDB поддерживается ведение файлов журналов. Для достижения максимальной производительности эти файлы необходимо разместить на разных с базой данных дисках, воспользовавшись параметром --bdb_log_dir.

  • Каждый раз, когда создается новый файл журнала BDB, MySQL устанавливает контрольные точки и удаляет все файлы журналов, которые не нужны для текущих транзакций. Можно также в любое время запустить команду FLUSH LOGS, чтобы установить контрольную точку для таблиц Berkeley DB. Чтобы произвести восстановление после сбоя, необходимо воспользоваться резервными копиями таблицы, а также бинарным журналом
    MySQL (см. раздел Резервное копирование баз данных). Предупреждение: если удалить
    используемые старые файлы журналов, BDB не сможет осуществить восстановление, и в случае сбоя вы можете потерять данные.

  • В MySQL все таблицы BDB должны иметь первичные ключи, чтобы обеспечить возможность обращаться к ранее считанным строкам. Если первичный ключ не создан, MySQL создаст его и будет поддерживать скрытый первичный ключ. Длина скрытого ключа составляет 5 байтов, а его значение увеличивается при каждой попытке вставки.

  • Если все столбцы, к которым производится обращение в таблице BDB, являются частью одного индекса или одного первичного ключа, то MySQL может выполнить запрос, не обращаясь к самой строке. Для таблиц MyISAM это справедливо только если столбцы являются частью одного индекса.

  • Первичный ключ обеспечивает более быструю обработку, чем любой другой ключ, так как он хранится вместе с данными строки. Поскольку остальные ключи хранятся как данные ключа + PRIMARY KEY, очень важно иметь как можно более короткие первичные ключи, чтобы сэкономить дисковое
    пространство и увеличить производительность.

  • Команда LOCK TABLES работает с таблицами BDB точно так же, как и с другими таблицами. Если команда LOCK TABLE не используется, MySQL устанавливает на таблицу внутреннюю множественную блокировку записи, чтобы обеспечить правильную блокировку, если другой поток установит блокировку таблицы.

  • Внутренняя блокировка в таблицах BDB осуществляется на уровне страниц.

  • Команда SELECT COUNT(*) FROM table_name выполняется медленно, так как для таблиц BDB не поддерживается подсчет количества строк в таблице.

  • Сканирование осуществляется медленнее, чем в таблицах MyISAM, так как данные в таблицах BDB хранятся в B-деревьях, а не в отдельных файлах данных.

  • Приложение всегда должно быть готово к обработке ситуаций, в которых любые изменения таблицы BDB могут привести к автоматическому откату и
    любое считывание может вызвать сбой из-за возникновения взаимоблокировки.

  • Сжимаемые ключи не присоединяются к предыдущим ключам, как в таблицах ISAM или MyISAM. Иначе говоря, информация по ключам в таблицах BDB займет несколько больше места по сравнению с таблицами MyISAM, в которых не используется параметр PACK_KEYS=0.

  • В таблице BDB всегда имеются промежутки, благодаря чему можно вставлять новые строки в середину дерева ключа. Из-за этого таблицы
    BDB несколько больше, чем таблицы MyISAM.

  • Оптимизатору необходимо знать приблизительное количество строк в таблице. В MySQL этот вопрос решается путем подсчета количества
    вставок и поддержки этой информации в отдельном сегменте каждой таблицы BDB. Если операторов DELETE или ROLLBACK выполнялось не слишком много, это количество должно быть достаточно точным для оптимизатора MySQL, но MySQL сохраняет это число только при закрытии, и оно в случае аварийного завершения работы MySQL может оказаться неверным. Если число не соответствует действительности на 100% - ничего страшного в этом нет. Количество строк можно обновить, запустив команду ANALYZE TABLE или OPTIMIZE TABLE
    (см. разделы Синтаксис команды ANALYZE TABLE и Синтаксис команды OPTIMIZE TABLE).

  • Если таблица BDB займет все пространство на диске, то будет выведено сообщение об ошибке (возможно, ошибка 28) и выполнен откат транзакции. В отличие от BDB, таблицы MyISAM и ISAM в mysqld будут ожидать, пока не появится свободное место, а потом продолжат работу.




Что нам нужно исправить в BDB в ближайшем будущем:


  • Процесс одновременного открытия многих таблиц BDB производится очень медленно. Если вы собираетесь применять таблицы BDB, не следует создавать очень большой кэш таблицы (например, больше 256 Кб) и необходимо использовать параметр --no-auto-rehash для клиента mysql. Мы планируем частично исправить это в версии 4.0.

  • Команда SHOW TABLE STATUS еще не предоставляет достаточного количества информации по таблицам BDB.

  • Оптимизация производительности.

  • Переход на запрет использования блокировок при сканировании таблиц.




Операционные системы, поддерживаемые BDB


Если после компиляции MySQL с поддержкой BDB вы получаете следующую ошибку в файле журнала при запуске mysqld:


bdb: architecture lacks fast mutexes: applications cannot be threaded
Can't init dtabases


то это означает, что таблицы BDB не поддерживаются архитектурой вашей системы. В этом случае необходимо перекомпилировать MySQL без поддержки таблиц BDB.


Примечание: приведенный ниже список не является полным. Мы будем обновлять его по мере получения дополнительной информации.


На данный момент нам известно, что таблицы BDB работают со следующими операционными системами.


  • Linux 2.x intel

  • Solaris SPARC

  • Caldera (SCO) OpenServer

  • Caldera (SCO) UnixWare 7.0.1


И не работают ссо следующими:


  • Linux 2.x Alpha

  • Max OS X




Ограничения таблиц BDB


Ниже приведены ограничения при использовании таблиц BDB:


  • Таблицы BDB хранятся в файле '.db', который находится в том же каталоге, где был создан (это сделано для того, чтобы была возможность
    обнаруживать блокировки в многопользовательской среде с поддержкой символических ссылок).
    Но вследствие этого таблицы BDB нельзя перемещать между каталогами!

  • При создании резервных копий таблиц BDB необходимо использовать mysqldump или создать резервные копии всех файлов 'table_name.db' и файлов журналов BDB. Файлы журналов BDB - это файлы в базовом каталоге донных с именами 'log.XXXXXX' (6 цифр). Обработчик таблицы BDB хранит незавершенные транзакции в файлах журналов; их наличие требуется при запуске mysqld.




Ошибки, которые могут возникнуть при использовании таблиц BDB


  • Если в 'hostname.err log' при запуске mysqld возникла следующая ошибка:


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


    это означает, что новая версия BDB не поддерживает старый формат файлов журналов. В этом случае необходимо удалить все файлы журналов BDB из каталога своей базы данных (файлы формата 'log.XXXXXXXXXX' ) и перезапустить mysqld. Мы также рекомендуем сохранить содержимое BDB-баз данных в файл путем вызова mysqldump --opt, удалить старые файлы таблиц и восстановить базы данных из сохраненного файла.

  • Если запуск производится не в режиме auto_commit и происходит удаление таблицы, которая используется другим потоком, в файле ошибок 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


    Это не смертельно, но мы не рекомендуем удалять таблицы, если вы не находитесь в режиме auto_commit, пока эта проблема не будет решена (а решить ее вовсе не просто).


<<<  Назад
 1  2 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Таблицы MyISAM

Таблицы MERGE

Таблицы ISAM

Таблицы HEAP

Таблицы InnoDB

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь