Hacker News

Три слоя кэша между выбором и диском

Три слоя кэша между выбором и диском Это исследование углубляется в три, изучая его значение и потенциальное влияние. — ОС Mewayz Business.

1 минута чтения

Mewayz Team

Editorial Team

Hacker News

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

Что происходит в тот момент, когда запрос SELECT покидает ваше приложение?

В тот момент, когда ваше приложение отправляет запрос SELECT, оно попадает в конвейер, который большинство разработчиков никогда не проверяет. Ядро базы данных перехватывает запрос до того, как произойдет какой-либо ввод-вывод, анализируя SQL во внутренний план выполнения и немедленно обращаясь к своей первой линии защиты: кэшу результатов запроса. Если идентичный запрос с идентичными параметрами был выполнен недавно, движок может вернуть кэшированный набор результатов, не затрагивая ни одной страницы данных. Иногда это называют кешем запросов или кешем результатов, и в рабочих нагрузках с большим количеством операций чтения и низким уровнем записи — таких как аналитические панели и модули отчетности — он может полностью исключить подавляющее большинство операций чтения с диска.

Важным моментом здесь является то, что кэш запросов очень чувствителен к мутациям данных. Любой INSERT, UPDATE или DELETE в базовой таблице делает недействительными соответствующие кэшированные результаты. Вот почему транзакционные системы с большим объемом записи часто полностью отключают кэш запросов и вместо этого полагаются на более глубокие уровни.

Что такое буферный пул и почему он важнее, чем вы думаете?

Второй уровень кэша — и, возможно, самый важный в производственных системах — это пул буферов (называемый общим буфером в PostgreSQL, пулом буферов InnoDB в MySQL). Это область оперативной памяти, которую ядро ​​базы данных использует для хранения страниц данных, к которым недавно обращались. Если запрос не может быть обработан из кэша результатов, механизм проверяет, находятся ли необходимые страницы данных уже в буферном пуле, прежде чем выполнять какое-либо чтение с диска.

Буферный пул работает по принципу временной и пространственной локальности: доступ к данным, к которым недавно осуществлялся доступ, скорее всего, будет осуществлен снова, а к данным, хранящимся рядом с данными, к которым осуществляется доступ, вероятно, скоро будет получен доступ. Администраторы баз данных настраивают размер буферного пула как одно из наиболее важных конфигурационных решений, которые они принимают. Слишком маленький пул буферов приводит к постоянному вытеснению страниц, создавая явление, называемое перегрузкой, когда система тратит больше времени на устранение промахов в кэше, чем на выполнение запросов.

💡 ЗНАЕТЕ ЛИ ВЫ?

Mewayz заменяет 8+ бизнес-инструментов в одной платформе

CRM · Выставление счетов · HR · Проекты · Бронирование · eCommerce · POS · Аналитика. Бесплатный тариф доступен навсегда.

Начать бесплатно →

Ключевой вывод: в большинстве рабочих нагрузок OLTP пул буферов хорошего размера означает, что 95–99% всех операций чтения данных выполняются из оперативной памяти. Рабочий набор — подмножество ваших данных, к которым часто обращаются запросы — часто намного меньше общего размера базы данных. Выбор размера пула буферов в соответствии с вашим рабочим набором, а не всем набором данных, — это единственное действие по настройке, которое вы можете предпринять с максимальной отдачей.

Как кэш операционной системы заполняет пробел между оперативной памятью и диском?

Даже если собственный пул буферов базы данных отсутствует, запрос еще не предназначен для настоящего чтения с диска. Операционная система поддерживает страничный кеш (также называемый кешем файловой системы), область оперативной памяти, управляемой ядром, которая буферизует операции чтения и записи для блокировки устройств. Когда ядро ​​базы данных запрашивает страницу, отсутствующую в его буферном пуле, ядро ​​ОС проверяет свой собственный страничный кэш перед выдачей физической команды ввода-вывода контроллеру хранилища.

Этот третий уровень по большей части невидим для разработчиков приложений, но он чрезвычайно важен в системах, где буферный пул базы данных недостаточно обеспечен. Кэш страниц ОС используется всеми процессами, поэтому он конкурирует с вашим сервером приложений, веб-сервером и любым другим программным обеспечением, работающим на том же хосте. На выделенных серверах баз данных эта конкуренция минимальна, а кэш ОС обеспечивает значимый буфер второго шанса. На общих хостах или контейнерах с жесткими ограничениями памяти кэш ОС часто слишком мал, чтобы помочь.

Какой уровень кэша на практике обеспечивает наибольший выигрыш в производительности?

В реальных производственных системах буферный пул domi

Streamline Your Business with Mewayz

Mewayz brings 207 business modules into one platform — CRM, invoicing, project management, and more. Join 138,000+ users who simplified their workflow.

Start Free Today →

Попробуйте Mewayz бесплатно

Единая платформа для CRM, выставления счетов, проектов, HR и многого другого. Банковская карта не требуется.

Связанное руководство

Руководство по управлению HR →

Эффективно управляйте своей командой: профили сотрудников, управление отпусками, расчет зарплаты и оценка эффективности.

Начните управлять своим бизнесом умнее уже сегодня.

Присоединяйтесь к 30,000+ компаниям. Бесплатный тариф навсегда · Без кредитной карты.

Нашли это полезным? Поделиться.

Готовы применить это на практике?

Присоединяйтесь к 30,000+ компаниям, использующим Mewayz. Бесплатный тариф навсегда — кредитная карта не требуется.

Начать бесплатный пробный период →

Готовы действовать?

Начните ваш бесплатный пробный период Mewayz сегодня

Бизнес-платформа все-в-одном. Кредитная карта не требуется.

Начать бесплатно →

14-дневный бесплатный пробный период · Без кредитной карты · Можно отменить в любой момент