Наскільки великою може стати база даних MySQL до того, як продуктивність почне погіршуватися


303

У який момент база даних MySQL починає втрачати продуктивність?

  • Чи має значення фізичний розмір бази даних?
  • Чи має значення кількість записів?
  • Чи є погіршення продуктивності лінійним чи експоненціальним?

У мене є велика база даних, з приблизно 15-мільйонними записами, які займають майже 2 Гб. Виходячи з цих цифр, чи є якийсь стимул для мене очищення даних, чи я впевнений, щоб дозволити йому продовжувати масштабування ще кілька років?

Відповіді:


204

Фізичний розмір бази даних не має значення. Кількість записів не має значення.

На мій досвід, найбільша проблема, з якою ви збираєтеся зіткнутися, - це не розмір, а кількість запитів, з якими ви можете впоратися за один раз. Швидше за все, вам доведеться перейти до конфігурації master / slave, щоб запити читання могли працювати проти ведених, а запити запису - проти ведучого. Однак якщо ви ще не готові до цього, ви завжди можете налаштувати свої індекси для запущених запитів, щоб пришвидшити час відповідей. Крім того, існує багато налаштувань, які ви можете зробити з мережевим стеком та ядром в Linux, що допоможе.

У мене було до 10 Гб, маючи лише помірну кількість з'єднань, і це справляло запити чудово.

Я спершу зосередився б на ваших індексах, потім перегляньте адміністратора сервера на вашу ОС, і якщо все, що не допомагає, може бути час впровадити конфігурацію головний / ведений.


Що робити, якщо розмір бази даних перевищує 7 ГБ. За цим фактом обмеження часу не виконується?
Хакер

89

Взагалі це дуже тонка проблема, а не банальна. Я рекомендую вам прочитати mysqlperformanceblog.com та MySQL з високою продуктивністю . Я дійсно думаю, що загальної відповіді на це немає.

Я працюю над проектом, який має базу даних MySQL з майже 1 ТБ даних. Найважливіший коефіцієнт масштабованості - оперативна пам’ять. Якщо індекси ваших таблиць вписуються в пам'ять, а ваші запити високо оптимізовані, ви можете обслуговувати розумну кількість запитів із середньою машиною.

Кількість записів має значення, залежно від того, як виглядають ваші таблиці. Різниця в тому, що є багато варчарських полів або лише кілька входов або довжин.

Має значення і фізичний розмір бази даних: наприклад, придумайте резервні копії. Залежно від вашого двигуна, ваші фізичні db-файли ростуть, але не стискаються, наприклад, з innodb. Тому видалення багатьох рядків не допоможе зменшити фізичні файли.

У цьому питанні багато, і як у багатьох випадках диявол у деталях.


45

Розмір бази даних має значення . Якщо у вас є більше однієї таблиці з більш ніж мільйоном записів, продуктивність дійсно починає погіршуватися. Кількість записів, безумовно, впливає на продуктивність: MySQL може бути повільним з великими таблицями . Якщо ви потрапите на один мільйон записів, у вас виникнуть проблеми з продуктивністю, якщо індекси не встановлені правильно (наприклад, немає приєднань індексів для полів "WHERE заяви" або "ON"). Якщо ви потрапили на 10 мільйонів записів, у вас почнуть виникати проблеми з продуктивністю, навіть якщо ви матимете всі свої показники правильно. Оновлення обладнання - додаючи більше пам’яті та більше потужності процесора, особливо пам’яті - часто допомагає зменшити найважчі проблеми, збільшивши продуктивність знову, принаймні, до певної міри. Наприклад37 сигналів перейшли від 32 ГБ ОЗУ до 128 ГБ ОЗУ для сервера баз даних Basecamp.


23

Я б сфокусувався спочатку на ваших індексах, ніж адміністратор сервера подивився б на вашу ОС, і якщо все, що не допомагає, можливо, настане час для налаштування майстра / підлеглого.

Це правда. Інша річ, яка зазвичай працює - це просто зменшити кількість даних, з якими неодноразово працювали. Якщо у вас є "старі дані" та "нові дані", і 99% запитів працюють з новими даними, просто перенесіть всі старі дані в іншу таблицю - і не дивіться на це;)

-> Погляньте на розділення .


21

2 Гб і близько 15 М записів - це дуже маленька база даних - я запускаю набагато більші на pentium III (!), І все ще працює досить швидко. один.


20

Тут якось безглуздо говорити про "продуктивність бази даних", "продуктивність запитів" - тут кращий термін. І відповідь така: це залежить від запиту, даних, над якими він працює, індексів, апаратного забезпечення тощо. Ви можете отримати уявлення про те, скільки рядків буде сканувати та які індекси використовуватимуться з синтаксисом EXPLAIN.

2 Гб насправді не вважається "великою" базою даних - це більше середнього розміру.


11

Зараз я керую базою MySQL на хмарній інфраструктурі Amazon, яка зросла до 160 ГБ. Виконання запитів чудово. Що стало кошмаром - це резервне копіювання, відновлення, додавання рабів або все інше, що стосується всього набору даних або навіть DDL на великих таблицях. Отримати чистий імпорт дамп-файлу стало проблематично. Для того, щоб зробити процес досить стабільним для автоматизації, необхідно зробити різні варіанти, щоб визначити пріоритетність стабільності над продуктивністю. Якби нам коли-небудь довелося оговтатися після катастрофи за допомогою резервної копії SQL, ми б не працювали на дні.

Горизонтальне масштабування SQL також є досить болючим, і в більшості випадків призводить до використання його способами, які ви, мабуть, не мали наміру, коли ви вирішили поставити свої дані в SQL на перше місце. Шардери, читайте рабів, мультимайстер та ін., Всі вони справді хитрі рішення, що додають складності всьому, що ви коли-небудь робите з БД, і жодна з них не вирішує проблему; лише пом'якшує це деяким чином. Я б настійно пропонував переглядати частину своїх даних з MySQL (або насправді будь-якого SQL), коли ви починаєте наближатись до набору даних розміру, коли такі речі стають проблемою.


перемістити його з MySQL .. в інший MySQL?
Pacerier

У нереляційний сховище даних. Реляційні бази даних принципово не масштабуються без простоїв або порушення реляційної моделі. Якщо ви збираєтеся зламати реляційну модель, краще припинити використання реляційної БД. Натомість створіть цільові документи та покладіть їх у механізм зберігання документів, як-от CouchDB чи інша система.
Річ Ремер

10

Також стежте за складними приєднаннями. Складність транзакцій може бути важливим фактором на додаток до обсягу транзакцій.

Рефакторинг важких запитів іноді пропонує значне підвищення продуктивності.


9

Мене одного разу покликали подивитися на mysql, який "перестав працювати". Я виявив, що файли БД розміщуються на файловому пристрої Network Appliance, встановленому на NFS2, і максимальний розмір файлу - 2 ГБ. І, безумовно, таблиця, яка перестала приймати транзакції, складала рівно 2 Гб на диску. Але щодо кривої продуктивності мені кажуть, що вона працювала, як шампінь, аж поки не працювала взагалі! Цей досвід завжди слугує мені приємним нагадуванням про те, що завжди є розміри вище та нижче того, про кого ви, природно, підозрюєте.


3
хоча це правда, що питання масштабування найкраще розглядати цілісно, ​​але це абсолютно не пов'язано з тим, як масштабує сам MySQL.
Лежати Райан

9

Важливим моментом є також призначення системи та даних щодня.

Наприклад, для системи з GPS-моніторингом автомобілів не стосуються даних запитів з позицій автомобіля в попередні місяці.

Тому дані можна передавати в інші історичні таблиці для можливих консультацій та скоротити час виконання щоденних запитів.


5

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

Якщо у вас є належні індекси, використовуйте належні двигуни (не використовуйте MyISAM там, де очікується кілька DML), використовуйте розділення, виділяйте правильну пам'ять залежно від використання та, звичайно, маєте гарну конфігурацію сервера, MySQL може обробляти дані навіть у терабайт!

Завжди є способи покращити продуктивність бази даних.


3

Це залежить від вашого запиту та підтвердження.

Наприклад, я працював із таблицею з 100 000 лікарських засобів, яка має загальну назву стовпця, де вона містить більше 15 символів для кожного препарату в цій таблиці. Я поставив запит для порівняння загальної назви лікарських засобів між двома таблицями. Запит займає більше хвилин для запуску. Те саме, якщо порівнювати наркотики за індексом наркотиків, використовуючи ідентифікаційний стовпець (як сказано вище), це займе лише кілька секунд.


1

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


0

Ні, це насправді не має значення. Швидкість MySQL становить близько 7 мільйонів рядків в секунду. Таким чином, ви можете досить масштабувати його


у вас є джерело про це?
Шобі

Не будемо забувати, що вставки в секунду залежать від типу машини, яку ви маєте (потужність процесора та швидкість диска). Під час свого неформального тестування я бачив, як 100-іш вкладиш на секунду на лукавих ноутбуках та до 2000 вставок в секунду на більш потужних ноутбуках на основі SSD. Іншими словами, це гіпотетична і недостовірна метрика.
ankush981

0

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

Запити з індексованими умовами поля разом із повним значенням повертаються загалом за 1 мс, але start_with, IN, Between, очевидно, містить умови, може знадобитися більше часу, щоб сканувати більше записів.

Крім того, у вас виникне багато проблем з технічним обслуговуванням DDL, як, наприклад, ALTER, DROP буде повільним і складним, а більше активного трафіку навіть для додавання індексу або нових стовпців.

Як правило, доцільно класифікувати Базу даних у стільки кластерів, скільки потрібно (500 Гб було б загальним орієнтиром, як говорять інші, це залежить від багатьох факторів і може змінюватись залежно від випадків використання), тим самим це забезпечує кращу ізоляцію та дає незалежність від конкретного масштабу кластери (більше підходить для випадку B2B)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.