- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
OIT и OAT должны постоянно изменяться
Совет "OIT и OAT должны постоянно изменяться" является ключевой фразой для решения всех проблем, связанных с производительностью базы данных. Время, потраченное на изучение цикла жизни транзакций в многоверсионной архитектуре Firebird, будет одним из лучших ваших вложений в дальнейшую работу с Firebird другими базами данных с открытыми текстами[93].
Для начала понимания взаимодействия между клиентскими процессами, которые "владеют" транзакциями, с одной стороны, и учетом транзакций, выполняемым в базе данных, с другой, будет полезным познакомиться с механизмом взаимодействия сервера и транзакций.
Образ состояния транзакцииВнутренний образ состояния транзакции (Transaction State Bitmap, TSB) является таблицей, содержащей идентификаторы транзакций и их состояние, поддерживаемой сервером и инициализируемой при начальном подключении к базе данных. В логических терминах TSB содержит каждую транзакцию, найденную в инвентарных страницах транзакций, которая новее, чем OIT. Пока существуют подключения к базе данных, серверный процесс поддерживает TSB динамически, добавляя новые идентификаторы транзакций, изменяя состояние и удаляя идентификаторы, которые становятся неинтересными (т. е. будут подтверждены). Сервер записывает изменения в инвентарные страницы транзакций без повторного их чтения с диска.
На рис. 25.2 иллюстрируются эти шаги. Каждый раз, когда сервер обрабатывает запрос для транзакции, он читает заголовочную страницу базы данных, чтобы получить идентификатор для следующей транзакции. Изменяется TSB, и изменения записываются в инвентарные страницы базы данных.
"Движение вперед OIT (И/ИЛИ OAT)" - это термин Firebird, обозначающий увеличение значений OIT и OAT
В заголовочной странице базы данных, когда подтверждающиеся более старые транзакции исключаются из TSB, а новые транзакции, в свою очередь, становятся "старейшими". Обновление заголовочной страницы базы данных последними значениями OIT, OAT и следующей транзакции являются частью такой динамической экологии.
Если новая транзакция является транзакцией SNAPSHOT, она будет иметь свою собственную копию TSB для поддержания согласованного вида состояния базы данных, каким он был при ее старте. Транзакция READ COMMITTED всегда обращается к самому последнему "глобальному" TSB для получения доступа к версиям, подтвержденным после ее старта.
Рис. 25.2. Взаимодействие процесса клиент-сервер с TSB
Условия для изменения OIT и OAT
Каждый раз, когда сервер стартует другую транзакцию, он проверяет состояние идентификаторов транзакций, которые он хранит в TSB, удаляя те, чье состояние было изменено на "подтвержденное", и заново вычисляет значения OIT и OAT. Он сравнивает их с хранимыми значениями в странице базы данных и при необходимости включает их в данные, сопровождающие запись в заголовок базы данных идентификатора новой "следующей транзакции".
Значение OAT будет увеличиваться, если транзакции будут достаточно короткими, чтобы предохранять активные транзакции и мусор от самых новых транзакций - от нагромождения, OIT будет увеличиваться, пока клиентские процессы подтверждают свою работу в большей степени, нежели отменяют их или теряют в результате аварий. При этих условиях производительность базы данных будет хорошей.
Застрявшая OAT хуже, чем застрявшая OIT. В системе с хорошей производительностью разница между OAT и самой новой транзакцией должна приблизительно равняться
количеству запущенных клиентских процессов, умноженному на среднее количество выполняющихся транзакций в каждом процессе. Выполняйте чистку базы данных во внерабочее время или используйте автоматическую чистку или оба варианта.
В главе 27 вы найдете несколько стратегий клиентских приложений для оптимизации OIT и OAT.
"Зазор""Зазор" - еще одна часть Firebird. Он означает разницу между OIT и OAT. Зазор будет небольшим в сравнении с общим количеством транзакций или, в идеале, нулем. При этих условиях разумно предположить, что не существует подвешенных транзакций, что привело бы к раздуванию TSB и большому разрастанию инвентарных страниц транзакций.
Собственно сам зазор не ухудшает производительность. Зазор является индикатором большого объема накладных расходов, добавляемых системой управления транзакциями к обработке базы данных - чрезмерное использование и фрагментация памяти, избыточное количество читаемых страниц в процессе поиска и выделяемых страниц в процессе изменения и добавления данных. Решение и устранение проблем ухудшения производительности заключается в уменьшении зазора.
Чистка в сравнении со сборкой мусора
Сборка мусора (Garbage Collection, GB) - это постоянный фоновый процесс, который является функцией нормальной деятельности по поиску записей и проверке версий записей, которая выполняется для каждой транзакции. Когда обнаруживается устаревшая версия записи с идентификатором меньшим, чем OAT, происходит одно из двух:
* для Классического сервера устаревшие версии записей удаляются немедленно. Это называется кооперативной сборкой мусора, потому что каждая транзакция и каждый экземпляр сервера участвуют в чистке мусора, опережая все другие;
* для Суперсервера устаревшие версии записей помечаются во внутреннем списке удаляемых элементов для потока сборки мусора. Когда поток сборки мусора "просыпается", он будет работать с элементами в этом списке, изменяя его.
Чистка (sweep) также выполняет эту задачу, но в отличие от сборки мусора она может иметь дело с одной категорией заинтересованных транзакций: с теми, которые имеют состояние "отмененные" (rolled back). Она может также удалить "остатки" удаленных записей и освободить память для повторного использования.
Зазор является важным для автоматической чистки, потому что установленный для базы данных интервал чистки (sweeping interval) управляет максимальной величиной зазора, при достижении которого стартует процесс чистки[94]. Автоматическая чистка выполняется редко или никогда не выполняется для некоторых баз данных, потому что зазор не достигает порогового значения.
По умолчанию каждая база данных создается с интервалом чистки (максимальной величиной зазора) в 20 000. При необходимости эта величина может быть увеличена или уменьшена, или же чистка совсем может быть отключена при установке величины интервала в 0.
В системе, где зазор всегда меньше интервала чистки, не является справедливым, что для базы данных никогда не требуется чистка. Все базы данных должны вычищаться - это вопрос управления базами данных человеком, будут ли они чиститься автоматически, вручную с использованием gfix или обоими способами. Думайте об автоматической чистке как о системе стабильного функционирования, а не как о заменителе удобного управления базой данных.
Статистика транзакций
В Firebird есть несколько полезных утилит для получения сведений о том, насколько хорошо ваша база данных управляет зазором между OIT и OAT. Их вы можете также использовать для просмотра значений в заголовочной странице базы данных.
gstat
Инструмент командной строки gstat, используемый с переключателем -header, показывает различную статистическую информацию базы данных, включая текущее значение идентификатора транзакции для OIT, OAT и для следующей новой транзакции. Для использования gstat соединитесь с базой данных как пользователь SYSDBA из командной строки на главной машине и перейдите в каталог bin Firebird. Наберите следующий текст в Windows:
gstat -h <путь-к-базе-данных> -user sysdba -password masterkey
Наберите в POSIX:
./gstat -h <путь-к-базе-данных> -user sysdba -password masterkey
Вот фрагмент выходных данных:
Oldest transaction 10075
Oldest active 100152
Oldest snapshot 100152
Next transaction 100153
Терминология в этом отчете может вызвать удивление. При просмотре выхода gstat имейте в виду, что:
* Oldest transaction - это OIT;
* Oldest active - очевидно, OAT;
* oldest snapshot- обычно то же, что и OAT- строка будет выведена, когда OAT продвигается далее. Это фактический идентификатор транзакции, рассматриваемый сборщиком мусора как сигнал существования мусора, который может быть обработан[95].
isql
Вы можете получить похожий вид статистики из заголовка базы данных в сессии isql при использовании команды SHOW DATABASE.
Многие инструменты администратора Firebird сторонних разработчиков создают эквивалентные отчеты.
Что может рассказать вам статистика
Сборка мусора всегда будет выполняться над устаревшими версиями записей, не трогая заинтересованные транзакции. При этом OLDEST SNAPSHOT отмечает границы, на которых сборщик мусора останавливает просмотр подтвержденных транзакций. Любой мусор с такого номера транзакции и выше не будет обрабатываться.
Если зазор между OAT и NEXT TRANSACTION определяет гораздо большее количество транзакций, чем подсчитываемое количество подключенных пользователей и их задач, вы можете быть уверенными, что большое количество мусора не будет обрабатываться сборщиком мусора. Если этот зазор будет увеличиваться, работа с базой данных будет все больше и больше замедляться. Серверы будут выдавать ошибку "Out of memory" (недостаточно памяти) или просто будут аварийно завершаться, потому что TSB расходует большой объем памяти или приводит к тому, что сервисы управления системной памятью используют слишком сильную фрагментации памяти. Дешевые серверы - особенно те, которые нагружены предоставлением дополнительных сервисов- даже могут не получить достаточно ресурсов для записи сообщения в протокол.

