анализ архитектуры системы mysql

Следующее содержание представляет собой краткое изложение точек знаний, основанных на «настройке производительности MySQL и проектировании архитектуры», заинтересованные друзья могут прочитать эту книгу, в конце концов, изучить и сравнить системы в соответствии с книгой. Способен понимать контекст знания в целом.
1. Состав логического модуля
MySQL MySQL можно рассматривать как двухуровневую архитектуру. Первый уровень называется слоем SQL. Основная функция этой части - завершить все приготовления перед обработкой базовыми данными системой баз данных mysql, включая оценку разрешений, анализ sql и план выполнения. Оптимизация, обработка кэша запросов и т. Д. Второй уровень - это уровень механизма хранения (Storage Engine Layer), этот уровень является реализацией операции доступа к данным системы базы данных, которая выполняется различными механизмами хранения.
анализ архитектуры системы mysql
Он выглядит простой по структуре, но каждый слой содержит множество небольших модулей.

В уровень SQL Layer включены следующие модули:

  1. Модуль инициализации

  Модуль инициализации должен выполнять различные операции инициализации во всей системе при запуске сервера mysql, такие как инициализация различных буферов и структур кеша и применение пространства памяти, настройка инициализации различных системных переменных и различных механизмов хранения. Начальные настройки и др.

  1. Core API

  Основной модуль API предназначен в основном для обеспечения некоторых оптимизированных реализаций низкоуровневых операционных функций, требующих очень высокой эффективности, включая реализацию различных низкоуровневых структур данных, реализацию специальных алгоритмов, распределение символов, цифровую обработку и т. Д., Ввод-вывод небольших файлов, форматированный вывод. , И самая важная часть управления памятью. Все исходные коды основного модуля API сосредоточены в папке mysys и strings.

  1. Модуль сетевого взаимодействия

  Базовый модуль сетевого взаимодействия абстрагирует интерфейс api, используемый базовым сетевым взаимодействием, и реализует прием и передачу базовых сетевых данных для облегчения вызова других модулей. И часть обслуживания этой программы. Весь исходный код находится в папке vio.

  1. Модуль интерактивного протокола клиент и сервер

  Любая C / S-структурированная программная система определенно будет иметь свой собственный уникальный протокол информационного взаимодействия, и MySQL не является исключением. Часть MySQL, являющаяся модулем протокола взаимодействия клиента и сервера, реализует все протоколы в процессе взаимодействия между клиентом и MySQL. Конечно, эти протоколы построены на существующих ОС и сетевых протоколах. Такие как TCP / IP, Unix Socket.  

  1. Модуль пользователя

  Функции, реализуемые пользовательским модулем, в основном включают в себя управление полномочиями пользователя при входе в систему и управление авторизацией пользователей. Как и в MySQL, решите, открывать ли дверь посетителям.

  1. Модуль контроля доступа

      Что, если посетители могут делать все, что захотят, когда входят в дверь? По соображениям безопасности это не должно быть настолько произвольным. В это время модуль управления доступом должен отслеживать каждое действие гостя в режиме реального времени и давать разным гостям разные разрешения. Функция, реализуемая модулем управления доступом, заключается в управлении доступом пользователя к данным на основе информации авторизации каждого пользователя в пользовательском модуле и различных ограничений, уникальных для самой базы данных. Пользовательский модуль и модуль управления доступом объединены, чтобы сформировать функцию управления безопасностью разрешений для всей системы баз данных MySQL.

  2. Управление подключениями, поток подключения, модуль управления потоками

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

  1. Модуль синтаксического анализа и пересылки запросов

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

  2. Модуль Query Cache

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

  1. Модуль оптимизатора запросов

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

  1. Модуль управления изменениями таблиц

      Модуль управления изменениями таблиц в основном отвечает за выполнение некоторых запросов DML и DDL, таких как: обновление, удаление, вставка, создание таблицы, изменение таблицы и другие операторы.

  2. Модуль обслуживания стола

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

  1. Модуль управления состоянием системы

      Модуль управления статусом системы отвечает за возвращение пользователю различных данных о статусе, когда клиент запрашивает статус системы, таких как команды show status и команды show variables, обычно используемые администратором баз данных. Все полученные результаты возвращаются этим модулем.

  2. Табличный менеджер

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

  3. Модуль регистрации

      В основном отвечает за записи журнала логического уровня всего системного уровня, включая журнал ошибок, двоичный журнал, журнал запросов и т. Д.

  4. Модуль копирования

      Модуль репликации можно разделить на две части: модуль Master и модуль Slave. Модуль Master в основном отвечает за чтение двоичного журнала стороны Master в среде репликации и взаимодействие с потоком ввода-вывода на стороне Slave. Модуль Slave делает немного больше, чем модуль Master. В основном это отражается в двух потоках в системе. Один отвечает за запрос и получение двоичного журнала от Мастера и запись в поток ввода-вывода в журнал локального реле. Другой отвечает за чтение соответствующих файлов журнала из журнала реле, а затем их синтаксический анализ в поток SQL, который может быть правильно выполнен на стороне Slave и получить точно такой же результат, что и сторона Master, а затем передан потоку SQL, выполняемому Slave.

  5. Модуль интерфейса механизма хранения

      Модуль интерфейса механизма хранения - самая отличительная черта базы данных MySQL. В настоящее время среди различных продуктов баз данных только MySQL может реализовать управление подключаемыми модулями для своего основного механизма хранения данных. Этот модуль на самом деле является всего лишь абстрактным классом, но именно потому, что он успешно абстрагировал различные обработки базы данных для достижения характеристик современного подключаемого механизма хранения MySQL.

2. Координация работы каждого модуля

  Вот и суть. Мы используем пример, чтобы проиллюстрировать, как каждый модуль системы mysql любит друг друга, чтобы выполнить запрос, который мы считаем очень простым.

  Мы запускаем mysql, устанавливаем соединение с клиентом, запрашиваем запрос, получаем возвращенный результат и, наконец, выходим. Вот такой целый процесс для анализа.

  Первый шаг: после того, как мы выполним команду для запуска системы mysql, модуль инициализации mysql считывает параметры системы и параметры командной строки из файла конфигурации системы и инициализирует всю систему в соответствии с параметрами, такими как применение и назначение буферов, а также инициализация глобальных переменных. , И различные конструкции. В то же время каждый механизм хранения также запускается для выполнения своей собственной работы по инициализации. Когда вся система инициализирована, модуль управления подключением берет на себя управление. Модуль управления подключением запускает программу прослушивания для обработки запросов на подключение клиентов, включая мониторинг сети TCP / IP и сокеты unix. В это время в основном запускается mysql serve. , Готовы принимать запросы клиентов.

  Шаг 2: Когда модуль управления подключением прослушивает запрос на подключение клиента (с помощью соответствующих функций модуля сетевого взаимодействия), обе стороны используют протокол, определенный модулем протокола взаимодействия клиента и сервера, чтобы «поприветствовать» несколько слов, и модуль управления подключением подключится Запрос пересылается в модуль управления потоками для запроса потока подключения.

  Шаг 3. Модуль управления потоками затем передает управление модулю потока подключения и сообщает модулю потока подключения, что пришел мой запрос на подключение и необходимо установить подключение. Пожалуйста, обработайте его быстро. После получения запроса на соединение, модуль потока подключения сначала проверит, есть ли незанятый поток подключения, кэшированный в текущем пуле потоков подключения.Если он есть, он выберет один для подключения к клиентскому запросу, если нет незанятого потока подключения, затем установит его. Новый поток подключения запрашивает соединение с клиентом. Конечно, модуль потока подключения не сразу берет поток подключения для подключения к клиенту после получения запроса на подключение. Вместо этого он сначала проверяет авторизацию, вызывая пользовательский модуль. Только после того, как запрос клиента пройдет проверку авторизации, он будет Клиентский запрос связан с потоком подключения, ответственным за запрос.

  В MySQL клиентские запросы делятся на два типа: один - это запрос, который должен вызывать Parser, то есть синтаксический анализ модуля синтаксического анализа и пересылки запросов, для выполнения запроса; другой - это команда, которая может быть выполнена без вызова Parser. Запрос. Если наша первоначальная конфигурация включает функцию полного ведения журнала запросов, модуль синтаксического анализа и пересылки запросов вызовет модуль ведения журнала для подсчета запросов в журнале. Независимо от того, является ли это запрос типа запроса или запрос типа команды, он будет записан в журнал, поэтому из соображений производительности функция полного ведения журнала запросов обычно редко включается.

  Шаг 4: Когда клиентский запрос и поток соединения «обмен секретными кодами (протокол связи)» соединяются, поток соединения начинает обрабатывать различные команды (или запросы), отправленные клиентским запросом, и принимать связанные запросы. Он пересылает полученные операторы запроса в модуль синтаксического анализа и пересылки запросов. Анализатор запросов сначала выполняет базовый семантический и грамматический анализ запроса. Затем, в зависимости от типа команды, некоторые из них будут обрабатываться напрямую, а некоторые будут переданы для обработки другим модулям.

  Если это запрос типа Query, управление будет передано анализатору запросов. Анализатор запросов сначала анализирует, является ли это запрос типа select. Если это так, он вызывает модуль кеширования запросов, чтобы проверить, находится ли запрос в кеше запросов. уже существует. Если это так, напрямую верните данные из кэша в модуль потока подключения. Затем данные выводятся клиенту через поток, связанный с клиентом. Если это не тип запроса, который можно кэшировать, или если в кеше нет данных запроса, запрос будет продолжать передаваться обратно в анализатор запросов, и анализатор запросов обработает его соответствующим образом, а затем распространит его в соответствующий модуль обработки через распространитель запросов.

  Шаг 5. Если результатом синтаксического анализа синтаксического анализатора является оператор select, который не кэшируется, управление передается оптимизатору, который является модулем оптимизатора запросов. Если это оператор DML или DDL, он будет передан модулю управления изменениями таблицы. Если это запрос для обновления статистики, обнаружения, исправления и сортировки, он будет передан в модуль обслуживания таблиц для обработки, связанный с копированием запрос будет передан в модуль репликации для соответствующей обработки, а статус запроса запроса будет передан в отчет о сборе статуса Модуль. Фактически, модуль управления изменениями таблиц отвечает за различные DML и DDL процессором вставки, процессором удаления, процессором обновления, процессором создания и процессором изменения согласно соответствующему запросу обработки.

  Шаг 6. После того, как каждый модуль получит запрос от модуля синтаксического анализа и распределения запросов, он сначала проверит, есть ли у подключенного пользователя разрешение на доступ к целевой таблице управления и целевому полю через модуль управления доступом. Если да, будет вызван модуль управления таблицами Запросите соответствующую таблицу и получите соответствующую блокировку. Модуль управления таблицами сначала увидит, существует ли таблица в кеше таблицы, если она была открыта, он будет напрямую выполнять обработку, связанную с блокировкой. Если ее нет в кеше, вам необходимо открыть файл таблицы, чтобы получить блокировку, а затем передать открытую таблицу Модуль управления изменениями таблиц.

  Шаг 7. После того, как модуль управления изменениями таблицы «получит» открытую таблицу, он определит тип механизма хранения и другую связанную информацию таблицы на основе соответствующей метаинформации таблицы. В соответствии с типом механизма хранения таблицы отправьте запрос в интерфейсный модуль механизма хранения, вызовите соответствующий модуль реализации механизма хранения и выполните соответствующую обработку.

  Однако для модуля управления изменениями таблиц видимым является только ряд «стандартных» интерфейсов, предоставляемых модулем интерфейса механизма хранения.Конкретная реализация базового модуля реализации механизма хранения прозрачна для модуля управления изменениями таблиц. Ему нужно только вызвать соответствующий интерфейс и указать тип таблицы, и модуль интерфейса вызовет правильный механизм хранения в соответствии с типом таблицы для выполнения соответствующей обработки.

  Шаг 8: Когда запрос или команда обрабатываются (успешно или неудачно), управление будет возвращено модулю потока подключения. Если обработка успешна, результат обработки (который может быть набором результатов или индикатором успеха или неудачи) возвращается клиенту через поток соединения. Если во время обработки возникает ошибка, соответствующее сообщение об ошибке также будет отправлено клиенту, а затем модуль потока подключения выполнит соответствующую работу по очистке и продолжит ждать последующих запросов, повторить вышеупомянутый процесс или завершить отключение клиента. Запрос на подключение.

  Шаг 9: Если в вышеупомянутом процессе соответствующий модуль вызывает изменение данных в базе данных, а MySQL вызывает функцию bin-log, соответствующий модуль обработки также вызовет модуль обработки журнала для обновления соответствующего оператора изменения. Форма события записывается в двоичный файл журнала, указанный в соответствующем параметре.

  В процессе обработки контента каждого из вышеупомянутых модулей соответствующие основные вычислительные функции обработки сильно зависят от всего модуля MySQL API, такие как управление памятью, файловый ввод-вывод, обработка чисел и строк и т. Д.

  Весь процесс, описанный выше, показан на рисунке 2-2:
анализ архитектуры системы mysql

рекомендация

отblog.51cto.com/15002891/2551630
рекомендация