Наскільки затратним є відкриття та закриття з'єднання БД?


15

Наскільки інтенсивним процесором є відкриття та закриття з'єднання БД (для веб-програми) у MySQL

  • ... коли програмне забезпечення БД знаходиться на localhost?
  • ... коли програмне забезпечення БД знаходиться на іншій машині?

Відповіді:


12

Подумайте про об'єм пам'яті, що виділяється на з'єднання БД. Які речі потрібно виділити? Відповідно до посібника з вивчення сертифікації MySQL 5.0, сторінка 357 :

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

Які параметри регулюють буфери за з'єднання?

Виділення та розміщення цих буферів потребує часу, коли відбувається з'єднання. Не забудьте помножити суму цих значень на max_connections . В якості побічної записки, будь ласка, утримайтеся від використання mysql_pconnect, оскільки стійкі з’єднання PHP та MySQL не вживаються добре. Ось два інформаційних посилання на цю тему:

У середовищі з великим рівнем читання, наприклад, OLTP, це буде дорого з точки зору використання оперативної пам’яті та можливого гальмування через заміну в ОС. На веб-сайті із низьким рівнем запису, я б не хвилювався так сильно.


10

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

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


4

Дилема між повторним використанням об'єкта та його розірванням та його повторним нарощуванням (обидва мають переваги та недоліки) часто може бути вирішена компромісом: кешуйте об’єкт, але протягом обмеженого часу (тобто із закінченням терміну дії). Якщо до об'єкта часто звертаються, він продовжує використовуватись. Але якщо він деякий час не використовується, то механізм закінчення терміну придатності розпоряджається ним, змушуючи його відтворити, коли це потрібно ще раз.

Система може мати глобальний гак для таких типів кеш-пам'яток, який викликається, коли пам’яті мало, що запускає всі вони скидати нещодавно використані об’єкти.


2

Mysql кешує з'єднання (або потоки), використовуючи кеш потоку (thread_cache_size). Максимальне значення для нього становить 100. Коли клієнт закриває з'єднання, він повертається в кеш. Коли відкриється нове з'єднання, він перевіряє кеш потоку. У системі ON дуже зайнята система, що відкриває закриття з'єднання може дорого коштувати, особливо якщо у вас є тривалі запити.

https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html Якщо ви можете дозволити Mysql Enterprise, ви можете використовувати плагін Thread Pool, реалізований у Mysql 5.6.

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