Database Vocabulary: 80 Terms Every DBA Must Know (англійською)

The complete DBA vocabulary guide: ACID, indexes, execution plans, replication, failover, RPO/RTO, sharding, partitioning, and 70 more essential database terms.

Адміністратори баз даних зберігають дані доступними, послідовними і ефективними в масштабі. Їхній словник включає SQL, налаштування продуктивності, високу доступність, стратегії резервного копіювання, безпеку і моніторинг. Цей посібник містить 80 термінів, які вам слід знати для обговорення, документування і розв’ язання проблем з системами баз даних професійною англійською мовою.


Основні властивості ACID

ACID

** ACID ** визначає чотири властивості, які гарантують надійність операцій у реляційній базі даних:

  • ** Атомність — всі операції у транзакції успішно завершаться або не завершаться жодною з них
  • ** C ** consistency — база даних переходить з одного чинного стану в інший
  • ** Ізоляція ** — одночасні транзакції не перешкоджають один одному
  • Durability — після затвердження зміни зберігаються навіть після аварії системи

Transaction

** транзакція ** — це одиниця роботи, що включає одну або більше операцій з базою даних. Трансакции починаються з BEGIN, закінчуються з COMMIT (успіх) або ROLLBACK (неуспіх).

Commit

** commit ** завершує транзакцію — запис всіх змін назавжди до сховища.

Rollback

** Відновлення ** скасує всі зміни, внесені у рамках транзакції, відновлюючи базу даних до стану, який був перед початком транзакції.

Savepoint

** Savepoint ** — це названа точка у межах транзакції. Ви можете повернути до точки збереження без скасування всієї операції.


Рівень ізоляції

Рівень ізоляції

Рівень ** ізоляції ** визначає, наскільки запущена транзакція буде видимою для інших одночасно виконуваних транзакцій. Стандартні рівні ізоляції SQL (від найслабшого до найсильнішого):

LevelDirty ReadNon-Repeatable ReadPhantom Read
Read UncommittedPossiblePossiblePossible
Read CommittedPreventedPossiblePossible
Repeatable ReadPreventedPreventedPossible (in theory)
SerializablePreventedPreventedPrevented

Грязное чтение

** Непристойне читання ** відбувається, коли транзакція читає дані, записані іншою транзакцією, яку ще не було передано — ця транзакція може прочитати дані, які буде відкинуто.

Неповторне читання

** Неповторне читання ** відбувається, коли транзакція перечитує рядок і виявляє, що він змінився, оскільки інша транзакція виконала оновлення.

Фантом читає

** Phantom read ** відбувається, коли транзакція повторює виконання запиту і знаходить нові рядки, яких не було раніше — тому що інша транзакція зафіксувала вставлення.

Контроль одночасності багатоверсій (MVCC)

** MVCC ** надає змогу декільком транзакціям читати послідовні знімок даних без блокування записів. PostgreSQL широко використовує MVCC — читачі ніколи не блокують авторів, а автори ніколи не блокують читачів.


Indexing

Index

** індекс ** — це структура даних, яка прискорює отримання даних за рахунок додаткової пам’ яті і витрат на запис. Без індексу запит потребує послідовного сканування всієї таблиці.

B-Tree Index (англійською)

Індекс ** B- tree ** (балансований деревоподібний індекс) є типовим типом індексу у більшості реляційних баз даних. Підтримує рівність (=) і діапазонні запити (<, >, BETWEEN).

Хеш-індекс

** Індекс гешування ** оптимізовано лише для пошуку точної рівності — не діапазонів. Швидше ніж B-дерево для рівності, але рідко використовується на практиці (PostgreSQL геш-індекси не підтримують < або > ).

Композитний індекс

** Складений індекс ** охоплює декілька стовпчиків. Порядок має значення: (last_name, first_name) може обслуговувати запити на last_name сам по собі або (last_name, first_name), але не first_name сам по собі (правило лівого префіксу).

Покриття індексу

** Покриваючий індекс ** містить всі стовпчики, потрібні для запиту — база даних може задовольняти запит повністю з індексу, не отримуючи доступу до головної таблиці (купи) взагалі.

Індекс розширення

** Роздутість індексу ** — це накопичення мертвих рядків (від оновлень і вилучень), які збільшують розмір індексу і зменшують швидкодію. Розв’язано за допомогою VACUUM або перебудови індексу.

Частковий індекс

** Частковий індекс ** побудований на підмножини рядків, що відповідають умові WHERE — менший, швидший і більш придатний для спільних шаблонів запитів.

«Частковий індекс на (status), де status = 'pending' є крихітним у порівнянні з повним індексом — більшість порядків знаходяться в кінцевому стані»


Виконання запитів

План виконання / Query Plan

** План виконання ** (або план запиту) описує, яким чином рушій бази даних виконає запит — які індекси буде використано, які методи з’ єднання і типи сканування. Використовуйте EXPLAIN ANALYZE в PostgreSQL.

Послідовне сканування

** Послідовне сканування ** (Seq Scan) читає кожен рядок у таблиці. Придатний для малих таблиць або коли потрібно повернути велику частину рядків. Повільно для пошуку цільових даних у великих таблицях.

Індексне сканування

** Сканування індексом ** використовує індекс для переходу безпосередньо до відповідних рядків. Набагато швидше, ніж послідовне сканування для вибіркових запитів; повільніше для масового читання.

Растрове сканування купи

Сканування * * bitmap heap scan * * використовує індекс для масового збору відповідних розташувань рядків, а потім читає їх у фізичному порядку — ефективно, коли відповідає багато рядків, але не всі.

Вбудована петля / Хеш-з’єднання / Об’єднання з’єднань

Ось стратегії з’ єднання PostgreSQL:

  • ** Вкладений цикл ** — для кожного рядка у зовнішній таблиці, сканування внутрішньої таблиці. Швидкий для малих вхідних даних.
  • ** Hash Join ** — побудувати геш- таблицю з меншого вхідного рядка; проаналізувати її за рядками з більшого вхідного рядка. Добре підходить для рівномірних з’ єднань на великих таблицях.
  • ** Об’ єднати з’ єднання ** — об’ єднати два попередньо впорядковані вхідні дані. Ефективний, коли обидві сторони мають сумісні індекси.

Статистика / pg_statistics

Планувальник запитів використовує ** статистику ** щодо даних таблиці (кількість рядків, розподіл значень, нульові дроби) для вибору планів виконання. Стара статистика призводить до поганих планів. Заснований у 800 році.

Vacuuming

** VACUUM ** відновлює зберігання з мертвих кортежів (рядків, позначених як вилучені). ** AUTOVACUUM ** виконується автоматично. ** VACUUM ANALYZE ** також оновлює статистику.


Висока доступність

Replication

** Реплікація ** копіює дані з головного сервера на одну або декілька реплік. Типи:

  • ** Синхронний ** — головний чекає на підтвердження запису принаймні від однієї репліки перед підтвердженням запису клієнтом. Без втрати даних; більша затримка.
  • ** Асинхронний ** — головний підтверджує негайно; репліка наздоганяє. Низька затримка; можлива втрата даних під час відключення.

Основний/Резервний

У реплікованому налаштуванні primary (або master) обробляє трафік читання/запису. ** резервний ** (або репліка, вторинний) отримує репліковані зміни і підвищується у відключенні.

Failover

** Відновлення після аварії ** це процес переключення з пошкодженого первинного на резервний. ** Автоматичне відновлення після аварії ** (за допомогою таких інструментів, як Patroni, Pacemaker або AWS RDS Multi- AZ) відбувається без вручну внесення змін.

Switchover

** Переключення ** це запланована, контролювана зміна ролі - основна грациозно переходить в резерв. Використовується для обслуговування.

Реконструкція (Reconstruction)

** RPO ** — це максимально допустима кількість втрат даних, виміряна у часі — наскільки далеко назад можна відновити дані. RPO = 0 означає відсутність втрати даних; RPO = 1 година означає, що можна втратити до 1 години транзакцій.

Реконструкція (Reconstruction)

** RTO ** — максимально прийнятний час відновлення служби після аварії. Коротке RTO вимагає автоматичного відновлення; довге RTO дозволяє вручну відновлювати.

«Наша SLA вимагає RPO ≤ 5 хвилин і RTO ≤ 15 хвилин — це означає синхронну потокову реплікацію і автоматичне відключення»

WAL (запис наперед)

** WAL ** (Write- Ahead Log) — це журнал транзакцій PostgreSQL — кожна зміна записується до WAL перед тим, як вона буде застосована до файлів даних. Використовується для тривалості, реплікації і відновлення в певну точку часу.


Резервне копіювання і відновлення

Логічне резервування

** логічне резервування ** експортує дані у вигляді команд SQL або CSV — легко читати, переносити, але повільно для великих баз даних. 10000000000000000♠10000000000000♠1000000000000♠1000000000000000♠10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Фізичне резервування

** Фізична резервна копія ** копіює файли необроблених даних — швидше для великих баз даних, але залежить від версії бази даних. 10000000000000000♠0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,8

Підтримка точки-в-часі (Point-in-Time Recovery)

** PITR ** відновлює базу даних до її стану у будь- який певний момент — за допомогою бази резервних копій і перезапису WAL. Критично важливо для відновлення даних після логічних помилок (припустимих випадкових вилучень).

«Розробник випадково скинув таблицю users о 14:23. Ми використовували PITR, щоб відновити до 14:22»

Вікно резервування

** Вікно резервування ** — це запланований час обслуговування для виконання резервування. Повне резервування, як правило, виконується щотижня; диференціальне або прирістове резервування — щодня.


Розділення і шарування

Partitioning

** Розділення на розділи ** розділяє одну велику таблицю на менші підтаблиці (розділи), якими прозорою формою керує база даних. Типи:

  • ** Розділення за діапазоном ** — за діапазоном дат (наприклад, щомісячні розділи)
  • ** Список розділів ** — за дискретними значеннями (наприклад, регіон)
  • ** Розділення за гешом ** — за гешом ключа (парний розподіл)

Переваги: швидші запити на розділені стовпчики, ефективне обрізання розділів, простіше архівування.

Sharding

** Шардування ** розподіляє дані між декількома незалежними екземплярами бази даних (шарами). На відміну від розділення (одна база даних), шардинг є розподіленою архітектурою, що вимагає координації на рівні застосунків. Використовується для великої пропускної здатності запису.

Горизонтальний масштаб / Вертикальний масштаб

  • ** Вертикальний масштаб ** — додавання більше процесора/ОЗУ до існуючого сервера. Простіше, але обмежено.
  • ** Горизонтальне масштабування ** — додавання додаткових вузлів бази даних (репліки читання для читання; шардування для запису).

Керування з’ єднаннями та ресурсами

Пул з’ єднань

** Пул з’ єднань ** керує набором з’ єднань з базами даних, які можна використовувати знову і знову — програми позичають і повертають з’ єднання, замість того, щоб відкривати нове з’ єднання для кожного запиту. Приклади: PgBouncer (PostgreSQL), HikariCP (Java).

З’єднання Макса

** Максимальна кількість з’ єднань ** — це обмеження одночасних з’ єднань клієнтів. Типовим значенням PostgreSQL є 100. Перевищення його призводить до FATAL: too many connections — з’єднання спільного використання є рішенням.

Блокування / блокування

** блокування ** запобігає одночасному змінюванню одних і тих самих даних. Deadlock відбувається, коли дві транзакції мають блокування, яке потрібно іншій — обидві чекають нескінченно. Бази даних виявляють і розв’ язують застої, перериваючи одну транзакцію.

«Ми маємо паттерн застою: процес A блокує замовлення, а потім клієнтів; процес B блокує клієнтів, а потім замовлення. Послідовне замовлення замків вирішує це»

Тайм- аут команди / Тайм- аут блокування

** Timeout statement ** перериває запит, який виконувався занадто довго. ** Timeout lock ** перериває запит, який занадто довго чекав на отримання блокування. Обидві запобігають довготривалим операціям від блокування інших на неопределенный термін.


Security

Прозоре шифрування даних (англ. Transparent Data Encryption, TDE)

** TDE ** шифрує файли зберігання бази даних у стані спокою — захищає дані у разі крадіжки фізичного носіїв. Прозорий для програм.

Рі́д-Рі́д (фр

** RLS ** накладає правила доступу на рівні рядків — користувач може бачити лише ті рядки, які відповідають правилам (наприклад, тільки власні дані).

Найменший Привілей

Принцип найменших привілеїв означає, що кожен користувач бази даних повинен мати тільки ті права, які потрібні для його функції — немає повного SUPERUSER доступу в облікових записах програми.

Реєстрація аудиту

** Журнал аудиту ** записує, хто отримав доступ або змінив які дані і коли — необхідні для відповідності (GDPR, SOC 2, HIPAA). Розширення: pgaudit для PostgreSQL.


Корисні фрази

** В обзорах производительности: **

  • “Журнал повільних запитів показує, що це з’єднання виконує послідовне сканування таблиці orders — нам бракує індексу на customer_id.”
    • “Після оновлення статистики і додавання складного індексу, час запиту зменшився з 4, 2 секунд до 12 мілісекунд.” *

** У розмовах щодо розробки HA: **

  • “З асинхронною реплікацією, наш RPO становить приблизно 30 секунд — чи це прийнятно для бізнесу?”
    • “Patroni обробляє автоматичний відключення — коли головний відключається, репліка з найновішим WAL підвищується впродовж 15 секунд.” *

В ответ на инцидент:

  • “Ми досліджуємо шторм безвихідного стану в таблиці inventory — я витягую графік очікування блокування з pg_stat_activity.”

Practice

Перевірте ваші знання з лексики DBA за допомогою ** Набір вправ з адміністрування баз даних. Name ** — 5 вправ, які охоплюють ACID, швидкодію, реплікацію і термінологію резервування.

Досліджуйте ** ДБЯ навчальний шлях ** для вправ, підготовки до інтерв’ ю і практики написання звітів про події.

Поширені запитання

Про що ця стаття "Database Vocabulary: 80 Terms Every DBA Must Know (англійською)"?

The complete DBA vocabulary guide: ACID, indexes, execution plans, replication, failover, RPO/RTO, sharding, partitioning, and 70 more essential database terms.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Database Vocabulary: 80 Terms Every DBA Must Know (англійською)"?

Приблизно 15 min.