FirebirdSQL: внутрішні файли, тимчасові файли та змінні середовища
_by Vasily Sidorov, Sep 2, 2022, IBSurgeon
Досвідчені DBA Firebird знають, що Firebird може потребувати досить великого обсягу дискового простору для зберігання внутрішніх і тимчасових файлів. Рекомендований розмір дискового простору для тимчасових файлів у виробничій системі становить 30-40 Гб, але для систем з високим навантаженням він може бути більшим.
У цій статті ми опишемо типи внутрішніх і тимчасових файлів Firebird, а також розглянемо, як вони зберігаються та керуються через параметри конфігурації та змінні середовища ОС. Стаття продовжує серію статей і матеріалів, присвячених освоєнню встановлення та налаштування Firebird.
Важливе зауваження від розробників ядра Firebird:
Ніколи, ніколи, НІКОЛИ не встановлюйте\змінюйте змінну середовища FIREBIRD_LOCK - якщо ви не дуже добре знаєте, що робите.
Чітка рекомендація від команди IBSurgeon:
Не змінюйте FIREBIRD_LOCK.
Щодо інших тимчасових файлів - дивіться це.
Внутрішні файли у Firebird
Внутрішні файли - це файли, які Firebird використовує для виконання своїх внутрішніх операцій. Ці файли не повинні змінюватися або торкатися користувачами чи стороннім програмним забезпеченням. Інформація нижче наведена лише для довідки.
Загальний шаблон найменування внутрішніх файлів
Firebird використовує внутрішній префікс fbNN_, де NN може бути
- номером основної ODS (структури на диску) (ODS 12 для Firebird 3.0, ODS 13 для Firebird 4.0), тобто файл починається з fb13.
- NN може бути скороченою версією номера - наприклад, файл може починатися з fb50.
Також може бути префікс fb_, який також використовується для тимчасових файлів.
Типи внутрішніх файлів у Firebird
Існують такі основні типи внутрішніх файлів у Firebird:
- fb_lock_ - файли блокувань - файли, які використовуються менеджером блокувань Firebird
- fbNN_monitor_ - файли з даними таблиць моніторингу
- fbNN_trace_ - файл з даними для сеансів трасування
- fb_event_ - файл зі збереженими буферами подій
- fb_user_mapping - файли з даними відображення користувачів
- файли з внутрішніми даними для сеансів трасування
- файли-прапорці (нульового розміру)
- fb_repl_ - файли реплікації
Розглянемо внутрішні файли Firebird детальніше.
Файли блокувань
Файли блокувань мають префікс fb_lock_. Вони використовуються менеджером блокувань Firebird для синхронізації доступу до об’єктів у базі даних Firebird та між екземплярами Firebird.
Файли блокувань створюються під час відкриття файлу бази даних і видаляються під час закриття.
За замовчуванням файл бази даних закривається, коли останнє з’єднання від’єднується. Починаючи з Firebird 3.0, можна залишити файл бази даних відкритим у Firebird після від’єднання останнього з’єднання за допомогою опції LINGER.
Початковий розмір файлу блокувань встановлюється параметром LockMemSize у firebird.conf. Робочий розмір залежить від архітектури: SuperServer використовує файли блокувань менш інтенсивно, ніж Classic і SuperClassic. Типовий розмір таблиці блокувань становить близько 30-50 Мб, але для серверів з тисячами з’єднань у Classic/SuperClassic розмір файлів блокувань може зростати до 2 Гб. 2 Гб - це межа реалізації для файлів блокувань у стандартному Firebird.
Файли з даними таблиць моніторингу
Починаючи з версії 2.1, Firebird має таблиці моніторингу. Ці таблиці не зберігаються всередині бази даних, дані моніторингу збираються за запитом і зберігаються у внутрішніх файлах із шаблоном імені fbNN_monitor_.
Розмір файлів з даними таблиць моніторингу залежить від кількості з’єднань та їх активності (транзакції, запити, збережені процедури тощо). Також кількість і розмір файлів fb_NN_monitor_ залежить від кількості запитів до таблиць моніторингу з різних з’єднань (це одна з причин, чому не слід використовувати таблиці MON$ для завдань, не пов’язаних з моніторингом).
Файли з даними для сеансів трасування
Шаблон імені файлу fbNN_trace_ зберігає посилання на файл активного сеансу трасування. Файли з шаблоном імені fb_trace_ містять інформацію про сеанс трасування. Це свого роду буфер для даних трасування. Максимальний розмір файлу fb_trace обмежений параметром MaxUserTraceLogSize у firebird.conf. Якщо цей буфер буде переповнений, трасування автоматично призупиниться.
Файли для буферів подій
Файли з шаблоном імені fb_event_ - це буфери, де Firebird зберігає недоставлені події для клієнтських застосунків.
Файли з даними відображення користувачів
Файли fb_user_mapping використовуються для кешування відображень користувачів в екземплярах Firebird.
Файли-прапорці
У POSIX Firebird використовує файли-прапорці нульового розміру - fb_guard, fb_init, fb_port_NUMBER. Ці файли використовуються під час запуску Firebird.
Файли реплікації
У Firebird 4 та HQbird файли fb_repl_ містять внутрішні дані для процесів реплікації.
Розташування внутрішніх файлів
За замовчуванням усі внутрішні файли Firebird зберігаються в одній папці: у Windows це C:\ProgramData\firebird, у Linux - /tmp/firebird. Зверніть увагу, що папка повинна мати достатні права доступу, щоб екземпляр Firebird міг створювати та працювати з файлами там!
Можна змінити розташування папки з внутрішніми файлами Firebird, визначивши змінну середовища FIREBIRD_LOCK, але ми не рекомендуємо цього робити.
ЗВЕРНІТЬ УВАГУ: щоб уникнути пошкодження бази даних, усі процеси Firebird, які відкривають один і той самий файл бази даних, повинні працювати з одним і тим самим FIREBIRD_LOCK. Будь ласка, не створюйте цю змінну та використовуйте розташування за замовчуванням.
Розмір внутрішніх файлів
Практично загальний розмір внутрішніх файлів Firebird становить близько 100-200 Мб, максимум відомий - до 2 Гб.
Тимчасові файли у Firebird
Тимчасові файли створюються рушієм Firebird для зберігання тимчасових даних, які виникають у результаті операцій користувачів - наприклад, запитів з DISTINCT. Тимчасові файли можуть бути дуже великими у виробничих системах з високим навантаженням, тому досвідченому DBA необхідно вміти розпізнавати типи тимчасових файлів і, за потреби, налаштовувати конфігурацію Firebird або виділяти дискове місце для зберігання тимчасових файлів.
Розташування тимчасових файлів у Firebird
Firebird створює тимчасові файли в папці, визначеній змінними середовища FIREBIRD_TMP, TEMP, TMP (у такому порядку). Якщо таких змінних немає, тимчасові файли будуть створені в C:\Temp у Windows або /tmp у Linux.
Практично, у Windows ми можемо бачити тимчасові файли Firebird у C:\Windows\Temp (відповідає змінній середовища TEMP), у Linux - у /tmp.
Типи тимчасових файлів у Firebird
Існують такі тимчасові файли (усі використовують префікс fb_):
- fb_table_ - табличні об’єкти, включаючи, але не обмежуючись, тимчасовими таблицями
- fb_blob_ - BLOB-об’єкти та автономні транзакції
- fb_undo_ - дані відкату (undo)
- fb_recbuf_ - використовується для зберігання проміжних даних в активних запитах, віртуальних таблицях тощо
- fb_merge_ - дані для хеш-з’єднань
- fb_sort_ - сортування (для запитів з DISTINCT/ORDER BY/GROUP BY та для створення/перестворення індексів)
- fb_tpc_ - дані fb_tpc_ - з v4, список усіх відомих транзакцій із пов’язаними номерами фіксації
- fb_snap_ - дані для - з v4, список усіх активних знімків бази даних
Як змінити розташування тимчасових файлів?
Для версій Firebird до 4 можна визначити конкретну папку для зберігання тимчасових файлів типів 4-8 за допомогою параметра конфігурації Firebird TempDirectories.
Для Firebird 4 і вище новий параметр конфігурації TempTableDirectory дозволяє вказати папку для зберігання тимчасових таблиць типів 1-3. Його можна встановити у firebird.conf та databases.conf.
Змінні середовища для Firebird
Firebird може використовувати такі змінні середовища ОС (якщо вони визначені):
- FIREBIRD - папка з файлами конфігурації Firebird
- FIREBIRD_LOCK - папка з внутрішніми файлами
- FIREBIRD_MSG - папка з файлом повідомлень (firebird.msg)
- FIREBIRD_TMP - папка для тимчасових файлів
Практично, FIREBIRD_TMP - це єдина змінна, яку має сенс визначати, якщо у вас є вагома причина зберігати тимчасові файли в певному нестандартному розташуванні.
Зверніть увагу, що якщо шлях у FIREBIRD_TMP буде недійсним (не існує або недостатньо прав), це призведе до критичних помилок, які перешкоджатимуть роботі Firebird.
Важливе повідомлення від основних розробників Firebird:
Ніколи, ніколи, НІКОЛИ не встановлюйте\змінюйте змінну середовища FIREBIRD_LOCK - якщо ви ДУЖЕ ДОБРЕ не знаєте, що робите.
Чітка рекомендація від команди IBSurgeon:
Ніколи не змінюйте FIREBIRD_LOCK. Ця інформація надається лише для довідки.
Щодо інших тимчасових файлів - див. це.
Замість підсумку: відповідь на дуже часте питання
Багато DBA питають - чи варто використовувати RAM-диск або tmpfs для зберігання внутрішніх та/або тимчасових файлів Firebird?
Коротка відповідь: Ні, краще налаштувати конфігурацію Firebird. Якщо у вас багато пам’яті, ви можете збільшити значення DefaultDBCachePages (тільки для SuperServer) та збільшити TempCacheLimit (у версіях 3+ Firebird дозволяє використовувати TempCacheLimit більше 2 ГБ).
Якщо ви не впевнені, які значення слід використовувати, скористайтеся Калькулятором конфігурації Firebird, який створює оптимальні та безпечні конфігурації для конкретних параметрів обладнання/віртуальної машини.
Довша відповідь: Firebird розроблений так, щоб зберігати більшу частину тимчасових і внутрішніх файлів у пам’яті, але, оскільки практично існують ситуації, коли тимчасові об’єкти стають дуже великими, він також має механізм для їх зберігання на диску. Firebird ефективно використовує механізми ОС (mmap, кеш файлової системи, тимчасові файли тощо) для кешування тимчасових і внутрішніх файлів у пам’яті, коли це можливо та доцільно. Налаштування Firebird слід виконувати спочатку через конфігурацію Firebird, а потім через ОС (встановлення розташування тимчасових файлів, різні параметри налаштування файлового кешу тощо).
Пов’язані посилання
Відео:
- Використання пам’яті у Firebird. Частина 1: Розуміння використання пам’яті
- Використання пам’яті у Firebird: Частина 2. Налаштування використання пам’яті
Презентація про налаштування використання пам’яті
Будь ласка, не соромтеся ставити будь-які запитання або надсилати відгуки на [email protected]