Ведение журнала снижает производительность MySQL. Но почему?

Ведение журнала снижает производительность MySQL. Но почему?

Я весьма удивлен, что не вижу ответа на этот вопрос ни на сайте, ни в документации MySQL (раздел 5.2(Похоже, в остальном лесозаготовки хорошо освещены!)

Если я включаю binlogs, я вижу небольшое падение производительности (субъективно), что и следовало ожидать при небольшом дополнительном вводе-выводе, но когда я включаю общий журнал запросов, я вижу огромное падение производительности (удвоение времени выполнения запросов или даже хуже), намного больше того, что я вижу с binlogs. Конечно, теперь я регистрирую каждый SELECT, а также каждое UPDATE/INSERT, но другие демоны записывают каждый свой запрос (Apache, Exim), не останавливаясь.

Я просто вижу последствия приближения к «переломному моменту» производительности, когда речь идет о вводе-выводе, или есть что-то принципиально сложное в регистрации запросов, что приводит к этому? Я бы с удовольствием мог регистрировать все запросы, чтобы упростить разработку, но я не могу оправдать то оборудование, которое, как мне кажется, нам понадобится для восстановления производительности с общей регистрацией запросов.

Конечно, я регистрирую медленные запросы, и если я отключу эту функцию, общее улучшение использования будет незначительным.

(Все это относится к Ubuntu 10.04 LTS, MySQLd 5.1.49, но исследования показывают, что это довольно универсальная проблема)

решение1

Общие журналы запросов — этомногобольше IO, чем бинарные журналы. Помимо того, что большинство серверов SQL на 90% читают и на 10% пишут, бинарные журналы хранятся в двоичном формате, а не в виде обычного текста, который занимает меньше места на диске. (Насколько меньше места? Я не уверен. Извините.)

Есть два аспекта, почему Apache и Exim могут записывать каждый запрос без существенного влияния на производительность. Во-первых, они регистрируют факт выполнения запроса, но то, что они помещают в журнал, обычно значительно меньше фактического запроса. HTTP-запрос часто вдвое больше строки, которая идет в журнал, и даже короткое, простое текстовое электронное письмо в 10 или 20 раз больше строки журнала, которая его сопровождает. Электронное письмо с вложением размером 10 МБ все равно будет иметь всего несколько строк, записанных в журнал.

Вторая часть этого заключается в том, что в обычном веб-приложении обычно есть десятки SQL-запросов, связанных с одной HTTP-страницей. Электронные письма, как правило, приходят в еще меньших количествах, чем HTTP-запросы. Ваш сервер MySQL, вероятно, пытается регистрировать гораздо больше, чем Apache или Exim.

Посмотрите на размер (несжатый) ваших бинарных и общих журналов MySQL и журналов Apache и Exim в конце дня. Держу пари, что вы обнаружите, что общий журнал MySQL самый большой, по крайней мере, в 5 раз.

решение2

Чтобы добавить к предоставленномуотвечать, вы также заметите снижение производительности, если вы ведете журнал на том же устройстве, на котором находятся ваши хранилища данных MySQL. Если это один и тот же диск, вам придется постоянно выполнять чтение и запись в нескольких местах, что замедлит весь процесс.

Это справедливо даже в том случае, если это другой раздел на том же физическом диске.

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

Связанный контент