КОНКУРЕНТНИЙ ДОСТУП У ТАБЛИЧНИХ БЛОКУВАННЯХ MYSQL: ПЕРЕВАГИ ТА НЕДОЛІКИ
09.01.2022 21:43
[1. Інформаційні системи і технології]
Автор: Грибовський А.П., студент 3 курсу, групи ПЗ-19-2, факультету прикладної математики, Дніпропетровський національний університет імені Олеся Гончара
Для кожного розробника чи адміністратора, який працює із MySQL неодмінно в певний момент стає актуальною проблема блокування. Неминучим цей момент є через основні особливості MySQL як системи із конкурентним доступом на читання чи запис. Роботу присвячено аналізу конкурентного доступу у табличних блокуваннях MySQL, на основі якого виділено основні переваги та недоліки такого виду блокувань.
У системах управління базами даних (СУБД) однією з основних проблем є конкурентний доступ. Труднощі виникають у різних ситуаціях: під час того, як декілька користувачів намагаються змінити одні й ті самі дані; або коли один користувач намагається отримати певні дані, які зазнають змін іншим користувачем у цей же момент. Прикладів таких є безліч. В MySQL існує два види блокувань, які використовуються для розв'язання цієї проблеми: shared locks (укр. спільні блокування) та exclusive locks (укр. монолітні або ексклюзивні блокування). Вони також називаються блокуваннями на читання та запис. Блокування на читання є розділеними, тобто одночасно багато користувачів можуть читати певний запис. Блокування на запис є ексклюзивними, що означає неможливість захоплення блокування на читання чи запис іншими користувачами, оскільки це є чи не єдиним способом гарантування наявності єдиного користувача, який робить запис в даний момент часу.
Існують різні види блокувань у СУБД із конкурентним доступом, а саме: користувацькі, глобальні, рядкові, а також табличні блокування. В рамках наукової роботи пропонується детальніше розглянути останні.
Досліджувана СУБД застосовує табличні блокування для таких підсистем зберігання як MyISAM, MEMORY, MERGE [1], проте є можливість блокування таблиць у будь-якій підсистемі зберігання за допомогою команди “LOCK TABLES” [2].
Табличне блокування є подібним. Коли виникає необхідність додати певну інформацію у таблицю, охоплюється ексклюзивне виключне блокування (exclusive lock) до всієї таблиці. Тоді зняття цього блокування мають дочекатися всі інші користувачі. Якщо ж користувачі не вносять ніяких змін в цей період часу, то всі читачі цих даних охоплюють спільне блокування (shared lock), що не буде вступати у конфлікт із рештою блокувань на читання [3].
Сервер MySQL містить дві черги табличних блокувань, які називаються read lock queue (черга блокувань на читання) і write lock queue (черга блокувань на запис). Черга блокувань на запис має пріоритет перед чергою блокувань на читання, тобто якщо черга блокувань на запис не порожня, то сервер MySQL буде звільняти її, поки вона не спорожніє, і тільки потім приступить до черги блокувань на читання. Цю поведінку можна змінити, запустивши сервер MySQL із прапором --low-priority-updates, тоді черга блокувань на читання отримає вищий пріоритет [4].
Виходячи з аналізу даної системи блокувань, доцільним буде висвітлити основні переваги та недоліки табличних блокувань.
Щодо переваг, то табличні блокування:
1. потребують досить невеликого об’єму ресурсів приладу;
2. чудово підходять для додатків, у яких зміна даних відбувається доволі рідко;
3. не мають взаємоблокувань (deadlocks);
4. приваблюють швидкою роботою під час блокування великої кількості таблиць;
5. швидко працюють при операціях GROUP BY або повному скануванні таблиць.
Щодо недоліків табличних блокувань, то вони:
1. не мають паралелізму для операцій щодо зміни таблиць;
2. передбачають попереднє звільнення поточного блокування читання для операцій на зміну;
3. передбачають ексклюзивне (монолітне) блокування на запис, що змушує всі інші операції чекати на остаточне закінчення запису (у тому числі виразу типу “SELECT”) [5].
Враховуючи саму природу табличних блокувань MySQL, а також їх основні переваги та недоліки табличних блокувань, можна дійти наступних висновків. У СУБД конкурентний доступ є однією із найчастіших проблем, що виникають під час роботи. Табличні блокування використовуються для розв'язання цього питання. Вони є доцільними у використанні виключно для таких таблиць, в які будуть якомога рідше вноситися зміни та, при цьому, які будуть часто запитуватися користувачами.
Список використаних джерел:
1. Офіційний сайт MySQL, URL: https://www.mysql.com/ (Last accessed: 27.12.2021).
2. Додаткова інформація о MySQL, URL: https://stackoverflow.com/tags/mysql/info (Last accessed: 27.12.2021).
3. Percona Open Source Database Experts Blog, URL: https://www.percona.com/ (Last accessed: 28.12.2021).
4. Justin Callison, Database Locking: What it is, Why it Matters and What to do About it, URL: https://www.methodsandtools.com/archive/archive.php?id=83 (Last accessed: 28.12.2021).
5. Бэрон Шварц, Петр Зайцев, Вадим Ткаченко, MySQL по максимуму С. 242-282
________________
Науковий керівник: Мащенко Л.В., старший викладач кафедри математичного забезпечення ЕОМ, Дніпропетровський національний університет імені Олеся Гончара