|
|
|
|||
| WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Поддержка для таблиц BDB включена в исходники MySQL начиная с версии
3.23.34 и активизирована в двоичной версии MySQL-Max. BerkeleyDB, доступные по адресу
http://www.sleepycat.com обеспечивают MySQL транзакционным драйвером
таблицы. Используя BerkeleyDB, Ваши таблицы могут иметь большую возможность
выживания после сбоев, а также обеспечивать Если Вы загрузили двоичную версию MySQL, которая включает поддержку для
BerkeleyDB, надо просто следовать командам для установки двоичной версии
MySQL. Подробности в разделе "4.7.5
mysqld-max, расширенный сервер mysqld". Чтобы компилировать MySQL с поддержкой Berkeley DB, загрузите MySQL
Version 3.23.34 или более новую и сконфигурируйте Пожалуйста, обратитесь к руководству, предоставленному дистрибутивом
Даже при том, что Berkeley DB сам по себе очень проверен и надежен,
интерфейс с MySQL все еще рассматривается в качестве бета-версии. Но он
активно улучшается и отлаживается. Если Вы работаете с Если Вы работаете с Следующие параметры Если Вы использовали опцию Обычно Вы должны запустить С помощью опции Вы можете также изменять Если Вы, сформировав MySQL с поддержкой для BDB-таблиц, получаете
следующую ошибку в журнале, когда Вы запускаете Это означает, что таблицы ОБРАТИТЕ ВНИМАНИЕ: следующий список не полон, разработчики его
модифицируют, поскольку получают большое количество информации о проблемах.
На сегодняшний день таблицы BDB работают под следующими ОС: На сегодняшний день таблицы BDB НЕ работают под следующими ОС:
7.5 Таблицы BDB или Berkeley_DB
7.5.1 Обзор таблиц BDB
COMMIT и
ROLLBACK на транзакциях. В дистрибутив исходников MySQL входит
комплект исходников BDB с несколькими патчами для обеспечения работы с MySQL.
Непропатченную версию BDB использовать вместе с MySQL нельзя.
7.5.2 Установка BDB
MySQL с
опцией --with-berkeley-db. Подробности в разделе
"2.3 Установка исходников MySQL".
cd /path/to/source/of/mysql-3.23.34
./configure --with-berkeley-db
BDB для получения более подробной информации.7.5.3 Опции запуска BDB
AUTOCOMMIT=0, изменения в таблицах
BDB не будут восприниматься, пока Вы не выполните
COMMIT. Вместо этого можно выполнить ROLLBACK,
чтобы забыть Ваши изменения.AUTOCOMMIT=1 (значение по умолчанию),
Ваши изменения будут совершены немедленно. Вы можете запустить расширенную
транзакцию с помощью вызова SQL BEGIN WORK, после которой Ваши
изменения не будут внесены в таблицу до тех пор, пока Вы не выполните
COMMIT (или ROLLBACK для отмены изменений).mysqld могут использоваться, чтобы
изменить поведение BDB таблиц:
Опция Что она делает
--bdb-home=directoryБазовый каталог для таблиц
BDB. Может совпадать с именем, указанным в --datadir. --bdb-lock-detect=#Определение блокировок по
Berkeley. Допустимы значения: DEFAULT, OLDEST, RANDOM или YOUNGEST. --bdb-logdir=directoryКаталог для файлов
протоколирования Berkeley DB. --bdb-no-syncНе синхронизировать сброс
протоколов. --bdb-no-recoverНе запускать Berkeley DB в
режиме восстановления. --bdb-shared-dataЗапускать Berkeley DB в
многопроцессном режиме (не используйте DB_PRIVATE при
установке Berkeley DB).--bdb-tmpdir=directoryИмя временного файла
Berkeley DB. --skip-bdbНе использовать поддержку
berkeley db. -O bdb_max_lock=1000Установить максимальное
число допустимых блокировок. Подробности в разделе
"4.5.5.4 Синтаксис SHOW VARIABLES
".--skip-bdb, MySQL не будет
инициализировать библиотеку Berkeley DB, что лишит возможности использовать
таблицы BDB, но зато сэкономит немало памяти.mysqld без опции
--bdb-no-recover, если Вы предполагаете использовать
BDB-таблицы. Это, однако, может создавать Вам проблемы, когда Вы пробуете
запускать mysqld, если BDB журналы разрушены.bdb_max_lock Вы можете определять
максимальное число блокировок (10000 по умолчанию), которые можно иметь
активными на BDB-таблице. Вы должны увеличить это число, если получаете
ошибки типа bdb: Lock table is out of available locks или
Got error 12 from ..., когда Вы делаете длинные транзакции, или
если mysqld должен исследовать очень много строк, чтобы
вычислить результат запроса.binlog_cache_size и
max_binlog_cache_size, если Вы используете большие транзакции.
7.5.4 Характеристики таблиц
BDB
--bdb_log_dir.
FLUSH LOGS в любое время для
создания контрольной точки таблицы Berkeley DB. Для восстановления нужно
использовать копии таблицы плюс двоичный файл регистрации MySQL. Подробности
в разделе "4.4.1 Резервирование баз данных".
Предупреждение: Если Вы удаляете старые журналы, которые
еще находятся в использовании, BDB не будет способен делать восстановление
вообще, и Вы можете потерять данные, если что-то пойдет неправильно.
PRIMARY KEY в каждой BDB-таблице, чтобы
предварительно читать строки. Если Вы не создаете ключ, MySQL сам создаст
поддерживающий скрытый PRIMARY KEY для Вас. Скрытый ключ имеет
длину 5 байт и будет увеличен для каждой попытки вставки.
BDB,
представляют собой часть того же самого индекса или части первичного ключа,
то MySQL может выполнять запрос без того, чтобы обращаться к фактической
строке. В таблице MyISAM вышеупомянутое верно только, если
столбцы представляют собой часть того же самого индекса.
PRIMARY KEY будет быстрее, чем любой другой ключ, поскольку
PRIMARY KEY сохранен вместе с данными строки. Поскольку другие
ключи сохранены как данные ключа+PRIMARY KEY, важно держать
PRIMARY KEY максимально коротким, что сэкономит место на диске.
LOCK TABLES работает на таблицах BDB так же,
как и с другими таблицами. Если Вы не используете LOCK TABLE,
MYSQL выдаст внутреннюю блокировку многократной записи на таблице, чтобы
гарантировать, что таблица будет правильно блокирована, если другой процесс
выдает блокировку таблицы.
BDB выполнена
на уровне страницы.
SELECT COUNT(*) FROM table_name работает медленно на
таблицах BDB, поскольку BDB таблицы не поддерживают счетчик
числа строк в таблице.
MyISAM,
поскольку данные в BDB-таблицах, сохранены в B-деревьях, а не в
отдельном файле данных.
BDB может вызвать автоматическую
обратную перемотку, а любое чтение может терпеть неудачу с ошибкой тупика.
BDB в сравнении с соответствующими таблицами MyISAM,
которые не используют PACK_KEYS=0.
DELETE или ROLLBACK, это число должно быть
достаточно точным для оптимизатора MySQL, но поскольку MySQL сохраняет его
только на завершении, может быть неправильно, если MySQL свалится неожиданно.
Не должно быть фатально, если это число не 100%-но правильно. Можно
модифицировать число строк выполнением ANALYZE TABLE или
вызовом OPTIMIZE TABLE.
BDB, Вы
получите ошибку (вероятно, ошибку с кодом 28), и транзакция должна быть
отменена. Это отличие от таблиц MyISAM и ISAM, где
mysqld будет ждать достаточного свободного места на диске перед
продолжением выполнения транзакции.7.5.5 Некоторые вещи, которые планируется реализовать
для BDB в ближайшем будущем
--no-auto-rehash
при вызове клиентов mysql. Планируется исправить к версии 4.0.
SHOW TABLE STATUS не обеспечивает много полезной информации
для BDB-таблиц.
7.5.6 Операционные системы, поддерживающие
таблицы типа BDB
mysqld:
bdb: architecture lacks fast mutexes: applications cannot be threaded
Can't init dtabases
BDB пока не поддержаны для Вашей
архитектуры. В этом случае Вы должны восстановить MySQL без поддержки таблиц
BDB.7.5.7 Ошибки, которые Вы можете получать, когда
используете BDB-таблицы
hostname.err при запуске 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
Это не фатально, но я не рекомендую проводить такие эксперименты над Вашей
системой, пока эта проблема не будет исправлена разработчиками.
| Найди своих коллег! |