Vocabulary for Discussing Database Performance in English

Англійський словник для роботи з базами даних: індекси, плани запитів, проблеми N+1, блокування і фрази, які інженери використовують для діагностики і виправлення повільних запитів.

Коли база даних сповільнюється, сповільнюється і вся програма — отже, проблеми з продуктивністю виникають постійно. Вони повні спеціалізованого словника: індекси, плани запитів, проблеми N+1, тупики. У цьому підручнику наведено основні терміни, поширені фрази і приклади речень для обговорення швидкодії бази даних англійською мовою.


Основні концепції діяльності

TermMeaning
IndexA data structure that speeds up lookups.
Query planThe steps the database takes to run a query.
Full table scanReading every row (usually slow).
CardinalityThe number of distinct values in a column.
LatencyHow long a query takes to return.
ThroughputHow many queries per second.
  • “Цей запит виконує повну перевірку таблиці — нам потрібен індекс у стовпчику user_id.” *

Мова повільних запитів

  • Запит може бути повільним, дорогоцінним або важким.
  • Це може ** заблокувати ** базу даних (надіслати занадто багато запитів).
  • Цей параметр може ** блокувати ** рядки, на які чекають інші.
  • Якщо програма працюватиме занадто довго, може виникнути ** тайм- аут **.
  • “Цей запит на звіт є дуже дорогим — він об’ єднує п’ ять таблиць і агрегує мільйони рядків.” *

Слово “дорогоцінний” відноситься до вартості ресурсу, а не грошей — ключовий біт англійської бази даних.


Задача n + 1

Це так часто трапляється, що заслуговує власного розділу.

“У нас тут є проблема N+1 — ми завантажуємо список, а потім запускаємо окремий запит для кожного елемента. Це сто запитів замість одного.»

Зазвичай, виправлення полягає у:

  • « Давайте об’ єднаємо ці дані в один запит за допомогою об’ єднання або скористаємося швидким завантаженням. » *

Знаючи “N+1”, “batch”, і “eager loading” миттєво сигналізує про плавність роботи з базою даних.


Індексація лексики

  • щоб ** додати ** / ** створити ** індекс
  • ** складений ** індекс (на декількох стовпчиках)
  • ** вкрай короткий ** індекс (містить всі дані, необхідні для запиту)
  • індекс ** роздутий ** (індекс, який з часом став неефективним)
  • ** відсутній ** індекс (який повинен бути, але його немає)

“Складений індекс на (status, created_at) дозволить цей фільтр і сортування за один раз.”

Але індекси мають свою ціну:

  • “Індекси прискорюють читання, але уповільнюють запис, тому не варто додавати їх для кожного запиту.” *

Читання плану запиту

PhraseMeaning
”It’s using the index.”Good — fast lookup.
”It’s doing a sequential scan.”Reading everything; often slow.
”The estimate is way off.”The planner’s row estimate is wrong.
”It’s spilling to disk.”The operation exceeded memory.

“Дозвольте мені запустити EXPLAIN — так, він виконує послідовне сканування, оскільки індекс не використовується.”

Дієслово “to EXPLAIN a query” (запустити аналізатор плану) є звичайним інженерним скороченням.


Блокування і одночасність

  • a ** lock ** — блокування рядка або таблиці.
  • ** заблоковано ** — дві транзакції, кожна з яких чекає на іншу.
  • ** dispution ** — багато запитів, які конкурують за один і той же ресурс.
  • ** довготривала транзакція ** — така, яка занадто довго утримує блокування.
  • “Ми бачимо суперечку за блокування на столі замовлень в години пік.” *
  • “Ця затримка сталася через те, що дві транзакції оновили ті ж рядки у різних порядках.” *

Використовує словосполучення

  • для оптимізації запиту
  • для ** профілю ** бази даних
  • для ** налаштування ** налаштувань
  • ** денормалізувати ** для швидкості читання
  • для ** shard ** / ** partition ** великих таблиць
  • для ** кешування ** часто використовуваних результатів
  • “Ми могли б денормалізувати це, щоб уникнути з’ єднання, але це додасть складності записам.” *

Фрази для діагностики проблем

  • « Де знаходиться вузька смуга — запит, диск або пул з’ єднань? » *
  • “Журнал повільних запитів вказує на цю одну агрегацію.” * “З’ єднання перевантажені; ми ставимо запити в чергу.” “Це стало повільніше, коли таблиця зростала — вона не масштабується.”

Люди плутають слова

ConfusedClarification
Index vs keyA key enforces uniqueness; an index speeds lookups (often both).
Normalise vs denormaliseNormalise removes duplication; denormalise adds it for speed.
Latency vs throughputLatency is per-query speed; throughput is volume.
Lock vs deadlockA lock is normal; a deadlock is a stuck cycle.

Вирок на практиці

“Ця кінцева точка повільна через проблему N+1 — ми виконуємо один запит на рядок. Я б з’єднав їх з’єднанням і додав складний індекс на (status, created_at). Це повинно перетворити сотню запитів в один і дозволити йому масштабуватися».

Якщо ви можете вільно говорити цю фразу, ви можете вести обговорення щодо швидкодії бази даних.


За допомогою цього словника ви зможете діагностувати і обговорити майже будь- яку проблему у базі даних англійською мовою — від виявлення повного сканування таблиці до виправлення N+1, а також пояснити, чому індекс прискорює читання, але уповільнює запис. Використовуйте прикладні речення як шаблони, утримуйте ваші пари нормалізувати/ денормувати і затримка/ пропускна здатність у правильному положенні, і ви будете звучати як інженер, який знає, де знаходиться вузька місцина.

На практиці: навігація, зворотний зв’язок і співпраця

Багато з термінів, які ми обговорювали - затримка, пропускна здатність, вузької місцини, оптимізації запиту - може здатися абстрактним, коли ви намагаєтеся ефективно спілкуватися з колегами, особливо якщо англійська не є вашою першою мовою. Легко впасти в надто технічні описи, які залишають інших збентеженими або відчувають себе виключеними з розмови. Ключова відмінність між хорошим і поганим спілкуванням з базою даних полягає в тому, щоб обґрунтувати проблему в практичному контексті, демонструючи * вплив *, а не просто повторюючи жаргон.

Розглянемо сценарій: ви переглядали запит на витягування, який вводить нову функцію, яка витягує дані з таблиці users. Розробник написав запит, який здається простим. Проте, під час перегляду ви зауважили потенційну проблему — за допомогою програми виконується велика кількість окремих запитів замість одного оптимізованого запиту. Ви не зможете відразу сказати: « Це проблема N+1! » Замість цього ви можете почати з чогось більш доступного, наприклад: « Я бачу, що цей запит виконується декілька разів для кожного запису користувача. Це може призвести до значного зниження продуктивності, оскільки кількість користувачів зростає — що може вплинути на час завантаження сторінки і загальну швидкість відповіді програми. ” Продовжуйте, пропонуючи рішення: “ Можливо, ми могли б ввести індекс на стовпчику user_id, або реструктурувати запит для виконання одного з’ єднання проти пов’ язаної таблиці orders. Чи ви готові дослідити ці варіанти?» Цей підхід зосереджено на * ефекті * проблеми — повільнішому завантаженні сторінок — і надає конкретні пропозиції щодо поліпшення.

Інша ситуація може виникнути в Slack під час розслідування інциденту. Молодший розробник повідомляє, що певний звіт виконується дуже повільно. Замість того, щоб відразу ж перейти до пояснення концепцій, таких як «план виконання типу сканування», вони могли б сказати: «Звіт займає багато часу для створення. Я бачу високе використання процесора на сервері бази даних, і план запиту показує, що він виконує повне сканування таблиці. Це означає, що він читає кожен рядок в таблиці products, яка досить велика. Нам слід розглянути можливість додавання індексу, щоб прискорити цей процес. » Ключовим у цьому випадку є перетворення технічних відомостей у зрозумілі терміни для всіх членів команди, незалежно від їх досвіду роботи з базами даних.

Нарешті, під час написання опису PR, який пояснює зміни, внесені для поліпшення швидкодії запиту, уникайте надто складних пояснень. Ясне і коротке твердження на кшталт: “Оптимізовано запит get_user_orders додаванням індексу на user_id. Це зменшує сканування повної таблиці і значно покращує час відповіді для отримання даних замовлення користувача.” є набагато ефективнішим, ніж довге пояснення того, як працює індекс або чому він корисний.

Ось приклад використання EXPLAIN ANALYZE для дослідження запиту:

EXPLAIN ANALYZE SELECT * FROM users WHERE id = 123;

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

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

Про що ця стаття "Vocabulary for Discussing Database Performance in English"?

Англійський словник для роботи з базами даних: індекси, плани запитів, проблеми N+1, блокування і фрази, які інженери використовують для діагностики і виправлення повільних запитів.

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

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

Скільки часу займає читання "Vocabulary for Discussing Database Performance in English"?

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