Скільки вибору в секунду може запустити сервер mysql?


19

Я пишу бізнес-план і мушу моделювати вартість, коли мій веб-сайт досягне 500 000 унікальних відвідувачів.

  • відвідувачів: 500.000
  • перегляди сторінок: 1 500 000
  • перегляд сторінок павука: 500 000
  • загальний перегляд сторінок: 2 000 000

Кожна сторінка робить 50 запитів + ​​-

  • запитів на день: 100 мільйонів
  • на годину: 4 млн
  • за хвилину: 70 000
  • за секунду: 1200
  • пік: 3000

Для цього обчислення мені потрібно 3000 запитів секунди ... який сервер може обробити це?

Проблема полягає в тому, що фактично мій сайт робить 2 000 відвідувань в день, і маю - + 150/200 запитів в секунду ... починаючи з цього моменту я очікую 50 000 запитів в секунду.

Скільки мені потрібних серверів у кластері чи реплікації, які керують цією роботою?


5
На якому веб-сайті 8k + запитує відвідування?
Ігнасіо Васкес-Абрамс

5
Вам потрібен огляд дизайну системи відразу.
Chopper3

1
Ніде поблизу недостатньо інформації, тому що ви нічого не говорили про те, що насправді має значення - самі запити. Також не треба розповідати нам про машину, якою ви працюєте. Це 486? Останній і найкращий суперкомп'ютер чи щось середнє? Усі ці цифри, які ви перерахували, не стосуються питання. Будь ласка, надайте ВІДПОВІДНУ інформацію.
Джон Гарденєр,

> На якому веб-сайті 8k + запитує відвідування? я отримую 2000 унікальних відвідувачів, але кожен відвідувач відкриває багато сторінок, + у мене є багато павуків всередині. 2000 унікальних користувачів генерують 6000 унікальних ips, відкриваючи щорічно більше 120 000 сторінок. спасибі

Відповіді:


22

Раніше я працював у компанії з електронної комерції з веб-сайтом, який мав кілька мільйонів звернень на сторінку в день. У нас був один DELL PE 1750 з 2 одноядерними процесорами та 2 ГБ оперативної пам’яті, розмір бази даних прибл. 4ГБ. У пік час цей сервер обробляв до 50 к + запитів в секунду.

Сказавши це: база даних була добре структурована, усі запити були тонко налаштовані (ми проводили щотижневі сеанси, аналізуючи повільні журнали запитів та виправляючи запити та індекси), а також налаштовано сервер. Кешування - це, безумовно, хороша ідея, але MySQL все одно робить це, вам просто потрібно проаналізувати продуктивність, а потім точно налаштувати, як використовується ваша пам'ять (кеш запитів проти інших параметрів).

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


8

Все залежить від того, наскільки складний запит, і скільки пам’яті мають сервери, і наскільки швидкі диски.

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


Або якісь серйозні зміни схеми та переосмислення ...
Массімо

3
Тюнінг ЗАВЖДИ перевагу перед додаванням більшої кількості апаратних засобів. Додавання більше апаратних засобів просто маскує проблему до тих пір, коли проблему вирішити набагато важче.
mrdenny

Дякую за відповідь, тому я думаю, що 2 сервери паралельно + 1 пасивний для зменшення корисності повинні бути добре, правда? Я говорю про 2х квадратичні сервери з 32 г оперативної пам’яті та швидкими дисками. я правий? пам’ятайте, що мені потрібні вистави!

1
все добре налаштовано та індексується, у мене є 1 або 2 повільних запиту на тиждень (а час повільного запиту - всього 2 секунди), все одно я пишу бізнес-план, і я хотів би знати, який тип серверного пулу може керуйте 12 000 000 сторінок, що відкриваються щодня, генеруючи 8000 запитів / секунду

8000 запитів в секунду - не все так багато. Один єдиний 16-ядерний сервер, ймовірно, зробить це. 64 гіга оперативної пам’яті (або більш-менш залежно від того, наскільки велика база даних та скільки даних потрібно зберігати в кеші в будь-який час), повинні зробити це. Мій БД (наданий його SQL Server) становить 1 ТБ на 16-ядерному 64-гігаривному сервері 64 Гб оперативної пам’яті, 40-50 тис. Користувачів користуються щоденно до декількох разів на хвилину (кожен) протягом дня.
mrdenny

3

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

Простий SELECT на індексованому стовпчику - це зовсім інший звір від пари JOIN на основі неіндексованих ... і, звичайно, все сильно змінюється, якщо задіяні таблиці містять записи 1K або 1M.

Також:

  • Яка Ваша поточна конфігурація обладнання?
  • Яку потужність (процесор, оперативну пам’ять, диск / вхід / вивід) ваш сервер використовує при поточному навантаженні?

насправді у мене є сервер з 2x чотирьохядерним ядром з 8 ГБ оперативної пам'яті. Я використовую повний операційний та 100% процесор (здається, я можу використовувати 800%, дивіться тут :) CPU: img834.imageshack.us/img834/3483/downloadv.png ram: img442.imageshack.us/i/ download2p.png disk: img213.imageshack.us/i/download1x.png спасибі

На основі цих графіків ви використовуєте лише одне (або щонайбільше два) ваших CPU ядер; тому ваше додаток, безумовно, не пов'язане з процесором ... або воно є, але воно не в змозі скористатися кількома процесорами. Крім того, вся ця пам'ять, яка використовується для "кешу" , нікому не потрібна , це лише ОС, яка користується цим, оскільки "вона є".
Массімо

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

Перш за все, ви повинні перевірити, чи не використовуєте ви їх, тому що в них просто немає потреби (= низьке навантаження), тому що ваші операції не можуть бути належним чином паралелізовані або тому, що ваші MySQL та / або Apache не налаштовані на використовувати їх. Оскільки ці дві програми за замовчуванням зазвичай багатопоточні, я би вивчив завантаження вашого сервера та ваші SQL-запити ...
Massimo

3

Як зауважив Ігнасіо, ви можете розглянути кешування. У cms чи, можливо, навіть перед стеком. 50+ запитів для кожної (кожної!) Сторінки справді багато.


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

4
Недоступних сайтів дуже мало; якщо він змінюється лише щосекунди, ви можете кешувати цілу секунду, як-от 10 переглядів сторінок ;-) Чи вважали ви не кешування сторінок повністю, а блоками або конкретними значеннями тощо? Ви можете кешувати за межами бази даних, на сегментах спільної пам’яті, файловій системі, запам’ятовувати. Також типово в такій ситуації ESI може бути корисним
Joris

0

Судячи з ваших коментарів, найбільшим фактором буде розмір набору даних або хоча б розмір "гарячого" набору даних. 3.000qps або навіть 8000qps на 16-ядерному сервері взагалі не є проблемою, якщо сервер рідко повинен переходити на диск, щоб задовольнити запит. Як тільки активний набір даних перевищить об’єм пам’яті, яку InnoDB використовує для кешування, ваша продуктивність швидко знизиться.


0

Для великих "гарячих" наборів даних, мабуть, варто вкласти час, щоб перетворитись на схему "великих даних", саме для чого вони потрібні. Наприклад, якщо у вас є велика кількість даних для отримання, але ви ніколи не переписуєте, а лише додаєте нові дані, подивіться на Apache Hive. Перегляньте їх, як правило, це аромат, який ви можете досить легко поєднати з існуючим кодом, що також запобіжить печію, коли не залишиться місця в кеші.


0

Занадто багато речей, які можуть вплинути на ваші запити в секунду, будь ласка, не довіряйте моїм даним, не перевіряючи себе. Я розміщую тут свій результат тесту на швидкість, щоб допомогти комусь оцінити qps із поточною (2018-09) mysql базою даних та машиною. У моєму тесті розмір даних менший, ніж пам’ять сервера (це значно зменшує IO та значно підвищує продуктивність).

Я використовую один процесор 3,75 Гб пам'яті, 100 ГБ ssd, gcp хмара екземпляр сервера mysql і отримую:

  • 1 клієнт, один sql один ряд читає: 799 кв.м / секунду.
  • 50 клієнтів, один sql один ряд читають: 6403 sql / second.
  • 50 клієнтів, один sql один ряд пише: 4341 рядків написано, qps. 4341 кв.м / секунду.
  • 1 клієнт, 30 к. Рядкових записів на sql: 92109 написаних рядків / с.

записувати результат тесту qps (2018-11) gcp mysql 2cpu 7,5 ГБ пам'яті 150 Гб ssd серіалізація написати 10 потоків, 30 к рядків запису на sql, 7.0566 ГБ таблиці, довжина ключа даних - 45 байт, а довжина значення - 9 байт, отримайте 154 КБ записаних рядків в секунду, процесор 97,1% записує qps 1406 / с в консоль gcp.
бронзовий чоловік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.