Tato stránka byla strojově přeložena. Přečtěte si anglický originál. English

Knihovna IBSurgeon

FirebirdSQL: interní soubory, dočasné soubory a proměnné prostředí

by Vasily Sidorov, 2. září 2022, IBSurgeon

Zkušení správci Firebird vědí, že Firebird může vyžadovat poměrně velké množství místa na disku pro ukládání interních a dočasných souborů. Doporučená velikost místa na disku pro dočasné soubory produkčního systému je 30-40 GB, ale u systémů s vysokou zátěží může být větší.

V tomto článku popíšeme typy interních a dočasných souborů Firebird a také zvážíme, jak jsou ukládány a spravovány prostřednictvím konfiguračních parametrů a proměnných prostředí OS. Článek navazuje na sérii článků a materiálů věnovaných zvládnutí instalace a konfigurace Firebirdu.

Důležité upozornění od vývojářů jádra Firebird:

Nikdy, nikdy, NIKDY nenastavujte/měňte proměnnou prostředí FIREBIRD_LOCK - pokud si nejste JISTÍ, co děláte.

Výslovné doporučení od týmu IBSurgeon:

Neměňte FIREBIRD_LOCK.

Pro ostatní dočasné soubory - viz toto.

Interní soubory ve Firebirdu

Interní soubory jsou soubory používané Firebirdem k provádění jeho interních operací. Tyto soubory by neměly být měněny nebo dotýkány uživateli ani softwarem třetích stran. Níže uvedené informace slouží pouze pro referenci.

Obecný vzor pojmenování interních souborů

Firebird interně používá předponu fbNN_, kde NN může být

  • číslo hlavního ODS (ON-Disk Structure) (ODS 12 pro Firebird 3.0, ODS 13 pro Firebird 4.0), tj. soubor začíná na fb13.
  • NN může být zkrácené číslo verze - např. soubor může začínat na fb50.

Také může existovat předpona fb_, která se používá také pro dočasné soubory.

Typy interních souborů ve Firebirdu

Ve Firebirdu existují následující hlavní typy interních souborů:

  1. fb_lock_ - soubory zámků - soubory používané správcem zámků Firebird
  2. fbNN_monitor_ - soubory s daty monitorovacích tabulek
  3. fbNN_trace_ - soubor s daty pro trasovací relace
  4. fb_event_ - soubor s uloženými buffery událostí
  5. fb_user_mapping - soubory s daty mapování uživatelů
  6. soubory s interními daty pro trasovací relace
  7. flag soubory (nulové velikosti)
  8. fb_repl_ - replikační soubory

Podívejme se na interní soubory Firebird podrobněji.

Soubory zámků

Soubory zámků mají předponu fb_lock_. Používají je správce zámků Firebird k synchronizaci přístupu k objektům uvnitř databáze Firebird a mezi instancemi Firebird.

Soubory zámků se vytvářejí při otevření databázového souboru a odstraňují se při jeho zavření.

Ve výchozím nastavení se databázový soubor zavře, když je poslední připojení odpojeno. Od Firebirdu 3.0 je možné ponechat databázový soubor otevřený ve Firebirdu po odpojení posledního připojení pomocí možnosti LINGER.

Počáteční velikost souboru zámků je nastavena parametrem LockMemSize v firebird.conf. Pracovní velikost se liší v závislosti na architektuře: SuperServer používá soubory zámků méně intenzivně než Classic a SuperClassic. Typická velikost tabulky zámků je asi 30-50 MB, ale u serverů s tisíci připojeními v Classic/SuperClassic může velikost souborů zámků narůst až na 2 GB. 2 GB je implementační limit pro soubory zámků ve vanilla Firebirdu.

Soubory s daty z monitorovacích tabulek

Od verze 2.1 má Firebird monitorovací tabulky. Tyto tabulky nejsou uloženy uvnitř databáze, monitorovací data jsou shromažďována na vyžádání a uchovávána v interních souborech se vzorem názvu fbNN_monitor_.

Velikost souborů s daty monitorovacích tabulek závisí na počtu připojení a jejich aktivitě (transakce, příkazy, uložené procedury atd.). Také množství a velikost souborů fb_NN_monitor_ závisí na počtu požadavků na monitorovací tabulky z různých připojení (to je jeden z důvodů, proč byste neměli používat tabulky MON$ pro nemontorovací úlohy).

Soubory s daty pro trasovací relace

Vzor názvu souboru fbNN_trace_ uchovává odkaz na soubor aktivní trasovací relace. Soubory se vzorem názvu fb_trace_ obsahují informace o trasovací relaci. Je to druh bufferu pro trasovací data. Maximální velikost souboru fb_trace je omezena parametrem MaxUserTraceLogSize v firebird.conf. Pokud bude tento buffer přeplněn, trasování se automaticky pozastaví.

Soubory pro buffery událostí

Soubory se vzorem názvu fb_event_ jsou buffery, kde Firebird ukládá nedoručené události klientským aplikacím.

Soubory s daty mapování uživatelů

Soubory fb_user_mapping se používají k ukládání mapování uživatelů do mezipaměti v instancích Firebird.

Flag soubory

V POSIX používá Firebird flag soubory s nulovou velikostí - fb_guard, fb_init, fb_port_NUMBER. Tyto soubory se používají při spuštění Firebirdu.

Replikační soubory

Ve Firebirdu 4 a HQbird soubory fb_repl_ obsahují interní data pro replikační procesy.

Umístění interních souborů

Ve výchozím nastavení jsou všechny interní soubory Firebird uloženy ve stejné složce: ve Windows je to C:\ProgramData\firebird, v Linuxu - /tmp/firebird. Upozorňujeme, že složka by měla mít dostatečná oprávnění, aby instance Firebird mohla vytvářet soubory a pracovat s nimi!

Je možné změnit umístění složky s interními soubory Firebird definováním proměnné prostředí FIREBIRD_LOCK, ale nedoporučujeme to.

POZNÁMKA: aby nedošlo k poškození databáze, všechny procesy Firebird, které otevírají stejný databázový soubor, by měly pracovat se stejným FIREBIRD_LOCK. Prosím nevytvářejte tuto proměnnou a používejte výchozí umístění.

Velikost interních souborů

Prakticky je celková velikost interních souborů Firebird kolem 100-200 MB, maximálně známá až 2 GB.

Dočasné soubory ve Firebirdu

Dočasné soubory vytváří engine Firebird pro ukládání dočasných dat, která vznikají jako výsledek operací uživatelů - například dotazy s DISTINCT. Dočasné soubory mohou být ve vysoce zatížených produkčních systémech velmi velké, takže je nezbytné, aby zkušený správce dokázal rozpoznat typy dočasných souborů a v případě potřeby upravit konfiguraci Firebird nebo alokovat místo na disku pro ukládání dočasných souborů.

Umístění dočasných souborů ve Firebirdu

Firebird vytváří dočasné soubory ve složce určené proměnnými prostředí FIREBIRD_TMP, TEMP, TMP (v tomto pořadí). Pokud takové proměnné neexistují, dočasné soubory se vytvoří v C:\Temp ve Windows nebo /tmp v Linuxu.

Prakticky ve Windows můžeme vidět dočasné soubory Firebird v C:\Windows\Temp (odpovídá proměnné prostředí TEMP), v Linuxu v /tmp.

Typy dočasných souborů ve Firebirdu

Existují následující dočasné soubory (všechny používají předponu fb_):

  1. fb_table_ - tabulkové objekty, včetně, ale nejen, dočasných tabulek
  2. fb_blob_ - blob a autonomní transakce
  3. fb_undo_ - undo data
  4. fb_recbuf_ - používá se k uchování mezilehlých dat v aktivních dotazech, virtuálních tabulkách atd.
  5. fb_merge_ - data pro hash spojení
  6. fb_sort_ - řazení (pro dotazy s DISTINCT/ORDER BY/GROUP BY a pro vytváření/znovuvytváření indexů)
  7. fb_tpc_ - data - od v4, seznam všech známých transakcí s přidruženými čísly potvrzení
  8. fb_snap_ - data - od v4, seznam všech aktivních databázových snímků

Jak změnit umístění dočasných souborů?

Pro verze Firebird před 4 je možné definovat konkrétní složku pro ukládání dočasných souborů typů 4-8 pomocí konfiguračního parametru TempDirectories.

Pro Firebird 4 a vyšší umožňuje nový konfigurační parametr TempTableDirectory určit složku pro ukládání dočasných tabulek typů 1-3. Lze jej nastavit v firebird.conf a v databases.conf.

Proměnné prostředí pro Firebird

Firebird může používat následující proměnné prostředí OS (pokud jsou definovány):

  • FIREBIRD - složka s konfiguračními soubory Firebird
  • FIREBIRD_LOCK - složka s interními soubory
  • FIREBIRD_MSG - složka se souborem zpráv (firebird.msg)
  • FIREBIRD_TMP - složka pro dočasné soubory

Prakticky je FIREBIRD_TMP jedinou proměnnou, kterou má smysl definovat, pokud máte vážný důvod ukládat dočasné soubory do konkrétního nedefaultního umístění.

Upozorňujeme, že pokud bude cesta v FIREBIRD_TMP neplatná (neexistuje nebo nemá dostatečná oprávnění), povede to ke kritickým chybám, které zabrání Firebirdu v práci.

Důležité upozornění od vývojářů jádra Firebird:

Nikdy, nikdy, NIKDY nenastavujte/měňte proměnnou prostředí FIREBIRD_LOCK - pokud si nejste JISTÍ, co děláte.

Výslovné doporučení od týmu IBSurgeon:

Nikdy neměňte FIREBIRD_LOCK. Tato informace slouží pouze pro referenci.

Pro ostatní dočasné soubory - viz toto.

Místo shrnutí: odpověď na velmi častou otázku

Mnoho správců se ptá - měli bychom použít RAM-disk nebo tmpfs pro ukládání interních a/nebo dočasných souborů Firebird?

Krátká odpověď je: Ne, raději upravte konfiguraci Firebird. Pokud máte hodně paměti, můžete zvýšit hodnotu DefaultDBCachePages (pouze pro SuperServer) a zvýšit TempCacheLimit (ve verzích 3+ Firebird umožňuje použít TempCacheLimit větší než 2 GB).

Pokud si nejste jisti, jaké hodnoty by se měly použít, použijte prosím Kalkulačku konfigurace Firebird, která vytváří optimální a bezpečné konfigurace pro konkrétní parametry hardwaru/VM.

Delší odpověď: Firebird je navržen tak, aby uchovával většinu dočasných a interních souborů v paměti, ale protože prakticky existují situace, kdy se dočasné objekty stanou velmi velkými, má také mechanismus pro jejich ukládání na disk. Firebird efektivně využívá mechanismy OS (mmap, mezipaměť souborového systému, dočasné soubory atd.) k ukládání dočasných a interních souborů do paměti, když je to možné a rozumné. Ladění Firebird by mělo být provedeno nejprve prostřednictvím konfigurace Firebird a poté OS (nastavení umístění dočasných souborů, různé možnosti ladění mezipaměti souborů atd.).

Související odkazy

Videa:

Prezentace o ladění využití paměti

Neváhejte se ptát na jakékoli dotazy nebo posílat zpětnou vazbu na [email protected]