Это случалось с каждым из нас при разработке веб-сайтов или приложений, использующих MySQL в качестве базы данных. Производительность внезапно сильно падала, и вы не имели понятия, почему это случилось. Этому могут быть причиной многие факторы (сильная загрузка CPU, нехватка дискового пространства, или слабая пропускная способность канала), но также это может […]
Автор: editor
Расширение индекса в InnoDB таблицах удивительным образом снижает производительность
Один из видов оптимизации, который мы часто используем, это расширение индекса. Он подходит, если есть запросы, использующие другие части составного ключа. И обычно это безопасно, но есть некоторые случаи, где производительность катастрофически падает. Рассмотрим пример. У нас есть таблица
Блокировки и уровни изоляции транзакций InnoDB в MySQL
Все, думаю, уже знают, что InnoDB использует блокировки на уровне строк. В зависимости от уровня изоляции транзакции могут блокироваться как строки, попавшие в результирующую выборку, так и все строки, что были просмотрены при поиске. Например, в REPEATABLE READ блокирующий запрос без использования индекса потребует перебора всей таблицы, а следовательно и […]
MySQL: уровни изоляции транзакций
Кто-бы ни купил MySQL, она еще долго будет будоражить ресурсы Наших с Вами серверов — и это хорошо. Есть таблица CREATE TABLE test (id INT, value VARCHAR(255)) ENGINE=InnoDB; Что по Вашему покажет этот запрос? START TRANSACTION; INSERT INTO test(id, value) VALUES (1, ‘test’), (2, ‘test 2’); SELECT * FROM test; […]
Шпаргалка по SOLID-принципам с примерами на PHP
Тема SOLID-принципов и в целом чистоты кода не раз поднималась на Хабре и, возможно, уже порядком изъезженная. Но тем не менее, не так давно мне приходилось проходить собеседования в одну интересную IT-компанию, где меня попросили рассказать о принципах SOLID с примерами и ситуациями, когда я не соблюл эти принципы и […]
Краш-курс по интерфейсам в Go
Интерфейсы в Go представляют собой одну из отличительных особенностей языка, формирующих способ решения задач. При схожести с интерфейсами в других языках, интерфейсы Go всё же имеют важные отличия и это поначалу приводит к избыточному переиспользованию интерфейсов и путанице в том, как и когда их использовать. Это нормально, но давайте попробуем […]
Наш вариант теста на знание SQL
У нас, как и во многих других организациях, проводится тестирование соискателей при поступлении их на работу. Основу тестирования составляет устное собеседование, но в некоторых случаях, даются также практические задания. Несколько дней назад, Руководство попросило меня подготовить набор задач на знание SQL. Разумеется, я постарался сделать задания не слишком сложными. Уровень […]
Внедрение MySQL Multi-Master кластера
Для начала стоит разобраться с тем, какой из реализацией технолгии MySQL Galera, Вы будете пользоватся. На рынке есть имплементации Galera от Percona и MariaDB. Именно эти две реализации и поделили львиную долю внедрений MySQL Galera. Оба форка используют в качестве плагина InnoDB, движок Percona XtraDB Storage Engine.
REMOTE_ADDR vs HTTP_X_FORWARDED_FOR
Давеча был свидетелем одного интересного спора о том как же действительно нужно определять IP адрес конечного пользователя из скриптов PHP. Собственно, каждое слово сабжа отображает действительную ситуацию. Это был религиозный спор, обострённый весенней замечательной погодой, в котором, я считаю, не оказалось правых и не правых, но который побудил меня к […]
Семантика exactly-once в Apache Kafka
Наконец, свершилось то, что сообщество Kafka так долго ждало: в Apache Kafka версии 0.11 появилась семантика exactly-once («строго однократная доставка»). В этом посте я расскажу вам о следующих моментах: – что представляет собой семантика exactly-once в Apache Kafka; – почему эта проблема сложна; – как новые свойства идемпотентности и транзакций позволяют корректно […]