Содержание
Нужно ли промывать механическую коробку передач (МКПП)?
Любая механическая коробка передач состоит из валов, подшипников, шестерен и синхронизаторов, но все эти детали не смогут работать без масла. Масло обеспечивает смазочную пленку, защиту от износа, легкость переключения передач, отвод тепла и очистку деталей от отложений. Несмотря на то, что масло обладает моющими свойствами и очищает детали, оно же является и источником загрязнений, наряду с продуктами износа трансмиссии. Но коробка передач загрязняется изнутри далеко не всегда. Что же может произойти, чтобы коробка передач загрязнилась?
Самый распространенный случай – попадание воды. Да, да коробка передач негерметична. Меняется температура, коробка разогревается, затем остывает, поэтому, чтобы не создавалось избыточное давление или вакуум, коробка имеет связь с атмосферой. Клапан, который обеспечивает приток или отток воздуха, называется сапун. Сапун находится в верхней части коробки, чтобы через него не выбрасывало масло. В обычных условиях эксплуатации все работает как и положено, но стоит попасть в глубокую лужу, коих в нашей стране не счесть, вода закрывает сапун, коробка резко охлаждается в воде и вода засасывается внутрь коробки передач. Вместо масла образуется эмульсия. Это плохо не только из-за ухудшения смазки. Если масло вовремя не заменить и эмульсия находится в коробке достаточно долго, то начинается процесс гидролиза, то есть масло превращается в «мыло». Только это «мыло» уже ничего не моет и не смазывает. Масло полностью теряет рабочие свойства и представляет из себя неприятную на вид, грязную мазь, которая даже не сливается с коробки.
Менее распространенный случай – длительный перегрев коробки. Долгая езда на высокой скорости или в условиях бездорожья, буксировка тяжелого прицепа разогревает коробку передач значительно сильнее допустимого. Масло начинает «свариваться», образуя мазь, как и в предыдущем случае, только более темного цвета.
Загрязнения в поддоне картера коробки, а также ровным слоем на других частях, образуются из окислившегося масла и продуктов износа при редкой смене масла, превышении интервала замены.
Простая замена масла не очистит коробку передач, нужны специальные меры. Специалисты разберут агрегат, тщательно промоют каждую деталь, но такой путь чрезвычайно затратен и не быстр. Значительно проще использовать специализированную промывку. Непосредственно перед штатной заменой масла, в проблемную коробку заливается специальная промывка. Далее, двигатель автомобиля нужно завести и оставить работать на 10-15 минут на холостом ходу. Куда-либо ехать или переключать передачи нет необходимости, так как на холостом ходу все валы коробки крутятся, масло циркулирует, механизм полноценно очищается. Далее, содержимое коробки передач, или моста, сливается, заливается свежее масло, и вуаля! Примечание: перед добавкой промывки агрегат должен иметь рабочую температуру, то есть промывка будет эффективно работать только после прогревочной поездки.
Лидер немецкого рынка автохимии и масел, компания Liqui Moly GmbH выпускает специализированную промывку для механических трансмиссий — Getriebe-Reiniger. Эта промывка создана на основе нафтеновых масел, обладающих отменными моющими свойствами, не действует на сальники и прокладки и практически не разжижает трансмиссионное масло. Содержит сильный моющий комплекс и антизадирные присадки для защиты трансмиссии в процессе самой промывки. Позволяет старому маслу как можно полнее слиться с агрегата.
Нет необходимости промывать механическую трансмиссию перед каждой заменой масла, хотя это и не помешает. Промывать обязательно тогда, когда были нарушены условия эксплуатации, перечисленные выше, а также в случаях возникновения проблем: плохое включение передач, шум в работе и т.п. Устранить проблемы и продлить ресурс агрегата всегда в ваших силах. Подобрать правильное масло под практически любой автомобиль можно в программе подбора.
Промывка для коробки автомобиля — для чего мыть коробку передач
Что же новенького с промывками?
В данном обзоре подробно рассмотрим новую промывочную присадку для механических коробок передач. А также узнаем для чего мыть механическую коробку, когда приходит время менять масло.
В принципе, продукт, предназначенный для процедуры мытья, в ассортименте уже был. Это профессиональная промывка масляной системы двигателя 7507 – Pro Line, для сравнения.
Ее можно было использовать, хотя и сейчас можно использовать, никто с нее эту функцию не убирал, для промывки механических коробок. В чем неудобство использования моторной промывки? В том, что нужна достаточно высокая концентрация, то есть объем доливки промывочной жидкости достаточно большой: пол-литра на пять литров трансмиссионного масла. Чаще всего доливать такое количество масла или присадки в механическую коробку передач с объемом заливки 1,5-4 литра – где-то 2,5.
В этом случае это достаточно неудобно, поэтому для МКПП выпустили маленькую фасовку 150 мл, но концентрированного состава, что будет достаточно на 4 литра трансмиссионного масла.
Соответственно, если у нас 2-2,5 литра, то — пол флакона на одну промывку. Опять же никаких проблем с дозировкой, никаких проблем с применением, заливаем в старое трансмиссионное масло, 10 минут машина работает на холостых оборотах, с невыжатым сцеплением.
В этом случае, если автомобиль не передвигается, а стоит на нейтрале, то, когда сцепление не выжато, все шестерни вращаются и поток масла максимален. Всю эту пыль от износа блокирующих колец, синхронизаторов и т.д. смываем; и второй момент: у все серьезно запущено.
В этот момент нам на помощь и приходит данная присадка для механики, например, после купания автомобиля в воде, когда через сапун или сальники за счет резкого перепада температур затянуло небольшое количество влаги в КПП.
В этом случае начинают появляться коррозия в трансмиссионном масле, во-вторых, снижаются защитные свойства масла, в-третьих, при перегреве масла, оно начинает “гидрироваться” и давать отложения. В отличии от мотора, здесь нет контактов с газами, нет попадания недогоревшего топлива, но все-таки определенные источники загрязнения, как изнашивающиеся детали, и вода туда попадает.
По большому счету, применять можно хоть при каждой замене, как и 7507. Единственный вопрос в том, что данный продукт удобнее добавлять, а также ситуация лишь в том, что попробуйте налить на 4 литра 400 грамм 7507, где идет контрольное отверстие в МКПП.
То есть задача будет: сначала извлечь порядка 300-400 грамм трансмиссионной жидкости, потом уже залить присадку. Это как раз очень неудобная процедура. Здесь 150 мл. промывочной жидкости на 4 литра или 75 на 2 литра, добавляются легко и непринужденно, затем пробка возвращается на место. Так что, в первую очередь, все это сделано для удобства использования.
Самое главное в процедуре – это убрать последствия попадания воды, что особенно характерно для роботов с одним сцеплением.
Синхронизаторы в таких блоках работают в ударном режиме с повышенными нагрузками. И, зачастую, для предотвращения некоторых проблем производители двигателя ставят два блокирующих кольца, соответственно будет больше металлической пыли в системе.
По мере накопления в масле они также начинают оседать на рабочих поверхностях колец, тем более, что и материал у нас практически такой же, что и у кольца, и, как следствие, они могут налипать на рабочие поверхности, либо к ним прикатываться. Все это затрудняет сброс кольцом смазочного материала и замедляют время реакции синхронизаторов, поэтому такие трансмиссии промывать только им на пользу.
Есть два варианта применения: взять и просто залить свежее трансмиссионное масло и дать коробке поработать достаточно короткий промежуток времени, после чего поменять его повторно, но чаще всего это очень дорого удовольствие, и теперь есть вариант дешевле и проще.
InnoDB Flushing and Checkpoints
InnoDB Flushing and Checkpoints
Реклама
1 из 121
Верхний обрезанный слайд
Скачать для чтения в автономном режиме
Программное обеспечение
InnoDB Flush ing and Checkpoints
Реклама
Реклама
Реклама
InnoDB Flushing и КПП
- 24. 03.21 1
Очистка InnoDB и контрольные точки
Миджин Ан
[email protected] - Содержимое
24.03.21 2
• Обзор
• Тема очистки страниц
• Очистка списка LRU
• Сброс списка сбрасывания
• Контрольные точки MySQL - ОБЗОР
24.03.21 3 - Обзор
• Архитектура InnoDB
24.03.21 4
API обработчика
Транзакция (транзакция)
Ведение журнала &
Крушение
Восстановление
(журнал и получение)
Мини
Сделка
(метр)
Замок
(слк)
Курсор (курс)
Ряд (ряд)
B-дерево (btr)
Страница (страница)
Менеджер буфера (buf)
Свободное пространство/управление файлами (fsp/fil)
ИО - Обзор
• Менеджер буфера
– Flusher (buf0flu.cc): средство записи грязных страниц и средство фоновой очистки.
– Doublewrite (buf0dblwr.cc): буфер двойной записи
24.03.21 5 - Списки буферных блоков
• Бесплатный список
— Содержит бесплатные рамки страницы
• Список LRU (наиболее редко используемые)
– Содержит все блоки, содержащие страницу файла
• Список сброса (наименее недавно измененный)
– Содержит блоки, содержащие страницы файлов, которые были изменены в
память, но еще не записана на диск
24. 03.21 6
База данных
Буфер
Хвост
Голова Д Д Д
Основной список LRU
Бесплатный список
Д
Сброс списка
Д Д - Свободный список
24.03.21 7
• Список свободных мест для свободного места в буферном пуле.
читать отсутствующие в данный момент страницы. Чтение: - Список ЛРУ
24.03.21 8
• Список LRU для принятия решения о том, какие страницы удалить.
⎼ Предотвращение удаления недавно использованных страниц (чтобы
молодой) - Сброс списка
24.03.21 9
• Список сброса для управления грязными страницами. Грязь: - Сброс списка
24.03.21 10
• Список сброса для управления грязными страницами. Промывка: - Промывка
24.03.21 11
• Для записи грязных страниц на диск в фоновом режиме,
буферизуется в области памяти
• InnoDB имеет ограниченное пространство в пуле буферов и журнале повторов.
• InnoDB пытается избежать необходимости в синхронном вводе-выводе, очищая
грязные страницы постоянно, сохраняя резерв чистых или свободных
пространства, которые можно заменить без промывки - Вызов промывки
24. 03.21 12
• Пользователям нравится однородная производительность
• Достаточно сбросить, чтобы не закончилось место в журнале.
• Не промывайте слишком агрессивно, чтобы повлиять на производительность.
• То есть трудно сбалансировать
‒ Смывай слишком медленно
• Соревнуйтесь с вводом-выводом, который должен происходить
• Свободная возможность оптимизации
‒ Задерживать слишком много
• Возможно, в будущем придется выполнять слишком много операций ввода-вывода.
• Потенциально вызывают «зависания» или падение производительности. - РЕЗЬБА ДЛЯ ОЧИСТКИ СТРАНИЦ
24.03.21 13 - Нить(и) для очистки страниц
24.03.21 14
• Обрабатывает все типы фоновой очистки
‒ Сбрасывает страницы с конца списка LRU
‒ Сбрасывает страницы из списка сброса
• Просыпается раз в секунду
• В некоторых случаях сброс может быть выполнен из пользовательских потоков.
• В MySQL 5.7+ доступно несколько потоков. - Многопоточная промывка
24.03.21 15
Экземпляр LRU #1 Экземпляр списка сброса #1
Экземпляр LRU #2 Экземпляр списка сброса #2
Экземпляр LRU #0 Экземпляр списка сброса #0
Запрос
Координатор
Рабочий
Рабочий
0 с 1 с
Треб…
ЛРУ…
ЛРУ… - Резьба для очистки страниц
24. 03.21 16
page_cleaner_t page_cleaner_slot_t
Мьютекс
Запрос события
Завершить мероприятие
Количество рабочих
Флаг проверки запроса
Слоты для очистки страниц
Предел LSN
Общее количество слотов
Количество запрошенных слотов
Количество промывочных щелей
Количество готовых слотов
Прошедшее время для промывки
Флеш-пасс
Текущий флаг
Состояние
Количество запрошенных страниц
Количество сброшенных страниц
из списка ЛРУ
Количество сброшенных страниц
из списка флешей
Флаг успеха для
сброс списка
Прошедшее время для
промывка LRU
Прошедшее время для
сброс списка
Промывочный проход LRU
Проход сброса списка - Структура очистки страниц
• buf/buf0flu.cc: page_cleaner_t
24.03.21 17 - Структура очистки страниц
• buf/buf0flu.cc: page_cleaner_t
24.03.21 18 - Структура очистки страниц
• buf/buf0flu.cc: page_cleaner_slot_t
24.03.21 19 - Структура очистки страниц
• buf/buf0flu.cc: page_cleaner_slot_t
24.03.21 20 - Структура очистки страниц
• buf/buf0flu.cc: page_cleaner_state_t
24. 03.21 21
ЗАПРОС
ПРОМЫВКА
ЗАКОНЧЕННЫЙ
НИКТО
Координатор
Рабочий
Координатор - Инициализация очистки страницы
• buf/buf0flu.cc: buf_flush_page_cleaner_init()
24.03.21 22
Создавайте столько слотов, сколько
количество экземпляров BP
…
глобальная переменная;
Координатор - Инициализация очистки страницы
• buf/buf0flu.cc: buf_flush_page_cleaner_init()
24.03.21 23
Создать ветку по очистке страниц
(координатор) - Очиститель страниц: координатор потока
• buf/buf0flu.cc: buf_flush_page_coordinator_thread()
24.03.21 24 - Очиститель страниц: координатор потока
• buf/buf0flu.cc: buf_flush_page_coordinator_thread()
24.03.21 25
Создание тем для очистки страниц
(рабочие) - Очиститель страниц: рабочий поток
• buf/buf0flu.cc: buf_flush_page_cleaner_thread()
24.03.21 26 - Очиститель страниц: рабочий поток
• buf/buf0flu.cc: buf_flush_page_cleaner_thread()
24.03.21 27
Дождитесь события ЗАПРОС
Работать до отключения - Очиститель страниц: координатор потока
• buf/buf0flu. cc: buf_flush_page_coordinator_thread()
24.03.21 28
Работать до отключения
Если предыдущее время промывки превысило указанное время (1 с),
установить OS_SYNC_TIME_EXCEEDED - Очиститель страниц: координатор потока
• buf/buf0flu.cc: buf_flush_page_coordinator_thread()
24.03.21 29
…
1-й случай: ЧП! Мы должны
сделать синхронный сброс, потому что
самая старая грязная страница слишком старая. - Очиститель страниц пробуждения для пакета ввода-вывода
• log/log0chkp.cc: log_preflush_pool_modified_pages()
24.03.21 30 - Средство очистки страниц пробуждения для пакета ввода-вывода
• log/log0chkp.cc: log_preflush_pool_modified_pages()
24.03.21 31 - Средство очистки страниц пробуждения для пакета ввода-вывода
• buf/buf0flu.cc: buf_flush_request_force()
24.03.21 32 - Очиститель страниц: координатор потока
• buf/buf0flu.cc: buf_flush_page_coordinator_thread()
24.03.21 33
2-й случай: Что-то есть
изменено на сервере!
(нормальный)
Если OS_SYNC_TIME_EXCEEDED установлен,
определяет количество страниц
рекомендуется сбросить из списка сбрасывания - • buf/buf0flu. cc: page_cleaner_flush_pages_recommendation()
24.03.21 34
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 35
Получить текущий LSN
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 36
Рассчитать среднее количество
страниц сбрасывается в секунду
Рассчитать среднее
скорость генерации
LSN в секунду
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 37
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 38
Сводная статистика (время, количество проходов)
всех слотов
Установить всю статистику (время, проход) на 0
для следующей промывки
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24. 03.21 39
Установить связанный монитор
значение счетчиков
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 40
Получите самый старый номер LSN, перейдя
все флеш списки
Рассчитать возраст;
Разница между текущим LSN
и самый ранний номер LSN в списке сброса
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 41
Рассчитать процент от io_capacity
промывать на основе двух факторов:
① Сколько там грязных страниц
находятся в буферном пуле
② Как быстро мы
генерация журналов повторов
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: af_get_pct_for_dirty()
24.03.21 42
Получить грязную страницу
процентное соотношение
Расчет % io_capacity: ① - Расчет % io_capacity: ①
• buf/buf0buf.cc: buf_get_modified_ratio_pct()
24.03.21 43 - Расчет % io_capacity: ①
• buf/buf0flu. cc: af_get_pct_for_dirty()
24.03.21 44
≥ ℎ𝑖𝑔ℎ 𝑤𝑎𝑡𝑒𝑟 𝑚𝑎𝑟𝑘(75)
≥ 𝑙𝑜𝑤 𝑤𝑎𝑡𝑒𝑟 𝑚𝑎𝑟𝑘
InnoDB пытается сохранить соотношение грязных
страниц в пуле буферов меньше, чем
srv_max_buf_pool_modified_pct(75.0) - • buf/buf0flu.cc: af_get_pct_for_lsn()
24.03.21 45
Рассчитать нижнюю отметку адаптивной промывки на основе
srv_adapative_flushing_lwm(10) и размер журнала
Расчет % io_capacity: ② - • buf/buf0flu.cc: af_get_pct_for_lsn()
24.03.21 46
Расчет % io_capacity: ②
Максимальная разница LSN;
при превышении начать
асинхронная предварительная промывка - • buf/buf0flu.cc: af_get_pct_for_lsn()
24.03.21 47
Получить грязную страницу
процентное соотношение
Расчет % io_capacity: ②
Процент io_capacity, который следует использовать для сброса = - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 48
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 49
Для каждой страницы в списке сброса
подсчитывает количество страниц, для которых
LSN страницы меньше целевого LSN.
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 50
Ограничение максимальной емкости ввода/вывода
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 51
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 52
Ожидаемое количество сброшенных страниц из списка сброшенных - • buf/buf0flu.cc: page_cleaner_flush_pages_recommendation()
24.03.21 53
Ожидаемое количество сброшенных страниц из списка сброшенных - Очиститель страниц: координатор потока
• buf/buf0flu.cc: buf_flush_page_coordinator_thread()
24.03.21 54 - Очиститель страниц: Координатор темы
• buf/buf0flu.cc: pc_request()
24.03.21 55 - Очиститель страниц: координатор потока
• buf/buf0flu.cc: pc_request()
24.03.21 56
Для всех page_cleaner_slots - Очиститель страниц: координатор потока
• buf/buf0flu. cc: pc_request()
24.03.21 57
Запросы на сброс всех слотов
все экземпляры пула буферов - Очиститель страниц: координатор потока
• buf/buf0flu.cc: buf_flush_page_coordinator_thread()
24.03.21 58
Делайте флеш для каждого слота - Очиститель страниц: Координатор темы
• buf/buf0flu.cc: pc_flush_slot()
24.03.21 59
Если есть хотя бы один запрошенный слот, - Очиститель страниц: координатор потока
• buf/buf0flu.cc: pc_flush_slot()
24.03.21 60
Найдите ЗАПРОШЕННЫЙ слот - Очиститель страниц: координатор потока
• buf/buf0flu.cc: pc_flush_slot()
24.03.21 61
Сначала выполните промывку LRU - ПРОМЫВКА СПИСКА LRU
24.03.21 62 - • buf/buf0flu.cc: buf_flush_do_LRU_batch()
• Очищает конец списков LRU:
— Поместите заменяемые страницы в хвост LRU в свободный список
– Сбросить грязные страницы в хвосте LRU на диск
• innodb_LRU_scan_depth = 1024 /* по умолчанию */
– Насколько глубоко исследовать хвост на наличие грязных страниц
– Пользовательский поток также может сканировать до этой глубины, если в нем нет доступных страниц.
бесплатный список
– Важно настроить, чтобы предотвратить синхронные сбросы (= spf)
Очистка списка LRU
24.03.21 63 - Очистка списка LRU
24.03.21 64
buf_flush_
LRU_список()
buf_flush_
do_batch()
buf_flush
_партия()
buf_do_LRU
_партия()
buf_flush
_LRU_list
_партия()
buf_LRU_free
_страница()
fil_io()
fil_flush()
buf_page_io_
полный()
buf_flush_p
age_and_try
_соседи()
buf_flush
_страница()
buf_flush_write
_block_low()
buf_dblwr
_добавить в_
партия()
buf_dblwr_
румянец_
буферизованный_
пишет()
buf_flush
_try_neig
hbors() - • buf/buf0flu.cc: buf_flush_LRU_list()
Очистка списка LRU
24.03.21 65 - • buf/buf0flu.cc: buf_flush_LRU_list()
Очистка списка LRU
24.03.21 66
Пакетная промывка LRU - • buf/buf0flu.cc: buf_flush_do_batch()
Очистка списка LRU
24.03.21 67
… - • buf/buf0flu.cc: buf_flush_batch()
Очистка списка LRU
24.03.21 68
…
Сделайте партию LRU - • buf/buf0flu.cc: buf_do_LRU_batch()
Очистка списка LRU
24.03.21 69 - • buf/buf0flu. cc: buf_flush_LRU_list_batch()
Очистка списка LRU
24.03.21 70
Начать промывку
с последним
страница из LRU - • buf/buf0flu.cc: buf_flush_LRU_list_batch()
Очистка списка LRU
24.03.21 71 - • buf/buf0flu.cc: buf_flush_ready_for_replace()
Очистка списка LRU
24.03.21 72
Проверить, задано ли
страница чистая или нет - • buf/buf0flu.cc: buf_flush_LRU_list_batch()
Очистка списка LRU
24.03.21 73
Это какая-то сменная страница, свободная страница
(список LRU и свободный список) - Очистка списка LRU
24.03.21 74
• Исключение/удаление страниц из списка LRU и размещение
их в свободном списке - • buf/buf0flu.cc: buf_flush_LRU_list_batch()
Очистка списка LRU
24.03.21 75
В противном случае, - • buf/buf0flu.cc: buf_flush_ready_for_flush()
Очистка списка LRU
24.03.21 76
…
Если страница уже очищена или выполняет ввод-вывод, верните false;
В противном случае вернуть true - • buf/buf0flu.cc: buf_flush_LRU_list_batch()
Очистка списка LRU
24. 03.21 77
Если данная страница готова к сбросу,
попробуй прошить с соседними страницами - • buf/buf0flu.cc: buf_flush_try_neighbors()
Очистка списка LRU
24.03.21 78
Для всех смываемых страниц в области смывания
Страница сброшена, но нет синхронизации
…
… - • buf/buf0flu.cc: buf_flush_page()
Очистка списка LRU
24.03.21 79
…
… Получить блокировку
…
Установите тип исправления и сброса - • buf/buf0flu.cc: buf_flush_page()
Очистка списка LRU
24.03.21 80
Получить рамку страницы - • buf/buf0flu.cc: buf_flush_page()
Очистка списка LRU
24.03.21 81
Записывает сбрасываемую страницу из пула буферов в файл
… - • buf/buf0flu.cc: buf_flush_write_block_low()
Очистка списка LRU
24.03.21 82
…
Очистить журнал (журнал транзакций — WAL) - • buf/buf0flu.cc: buf_flush_write_block_low()
Очистка списка LRU
24.03.21 83 - • buf/buf0flu.cc: buf_flush_write_block_low()
Очистка списка LRU
24.03.21 84
Случай двойного списания - • buf/buf0flu. cc: buf_flush_write_block_low()
Очистка списка LRU
24.03.21 85
Добавьте страницу в
буфер двойной записи - Очистка списка LRU
• Теперь страницы-жертвы собираются для замены
• Нам нужно сбросить их на диск
• Мы можем сделать это, вызвав buf_flush_end().
24.03.21 86 - • buf/buf0flu.cc: buf_flush_do_batch()
Очистка списка LRU
24.03.21 87
… - • buf/buf0flu.cc: buf_flush_end()
Очистка списка LRU
24.03.21 88
• очистить все страницы, которые мы собрали до сих пор
• сначала записывайте страницы в область dwb
• затем передать его в файл данных
; Посмотреть это позже - • После завершения всех работ по промывке вызывается следующая функция
последний, кто завершил ввод-вывод
• buf/buf0buf.cc: buf_page_io_complete()
Очистка списка LRU: полный ввод-вывод
24.03.21 89… - • buf/buf0buf.cc: buf_page_io_complete()
Очистка списка LRU: полный ввод-вывод
24.03.21 90
освободить страницу (список LRU и бесплатный список) - Очиститель страниц: координатор потока
• buf/buf0flu. cc: pc_flush_slot()
24.03.21 91
Во-вторых, сделайте сброс списка - СПИСОК ПРОМЫВКИ ПРОМЫВКА
24.03.21 92 - • buf/buf0flu.cc: buf_flush_do_flush_list_batch()
• Сброс для продвижения «самой ранней модификации LSN»
— Освободить место в журнале, чтобы его можно было уменьшить
– Размер списка сброса ограничен размером журнала повторов.
• Страницы перемещаются из списка сброса после внесения изменений.
синхронизировано с диском
• Количество страниц для промывки за цикл зависит от нагрузки
Сброс списка
24.03.21 93 - • innodb_io_capacity = 200 /* по умолчанию */
– Ограничение скорости сброса страниц во время простоя или во время выключения
— Изменение буфера сливается со скоростью 5-55% от innodb_io_capacity
• innodb_io_capacity_max = 2000 /* по умолчанию */
– Ограничение скорости промывки во время занятости
Сброс списка
24.03.21 94 - Очистка списка промывки
24.03.21 95
buf_flush
_партия()
buf_do_flush
_list_batch()
fil_io()
fil_flush()
buf_page_io_
полный()
buf_flush_page
_and_try_neigh
борс()
buf_flush
_страница()
buf_flush_write
_block_low()
buf_dblwr_add
_to_batch() buf_dblwr_
румянец_
буферизованный_
пишет()
buf_flush
_try_neig
hbors() - • buf/buf0flu. cc: buf_flush_do_batch()
Сброс списка
24.03.21 96
… - • buf/buf0flu.cc: buf_flush_batch()
Сброс списка
24.03.21 97
…
Выполнить сброс списка - • buf/buf0flu.cc: buf_do_flush_list_batch()
Сброс списка
24.03.21 98
Получить последнюю страницу
из списка флешей - • buf/buf0flu.cc: buf_do_flush_list_batch()
Сброс списка
24.03.21 99
Для всех смываемых страниц в области смыва,
сбросить их асинхронно - • После завершения всех работ по промывке вызывается следующая функция
последний, кто завершил ввод-вывод
• buf/buf0buf.cc: buf_page_io_complete()
Сброс списка сбрасывания: полный ввод-вывод
24.03.21 100
… - • buf/buf0buf.cc: buf_page_io_complete()
Сброс списка сбрасывания: полный ввод-вывод
24.03.21 101
Не освобождайте сброшенную страницу!
Сохраните его в списке LRU как чистую страницу. - Очиститель страниц: координатор потока
• buf/buf0flu.cc: pc_flush_slot()
24.03.21 102
Финишная промывка - Очиститель страниц: координатор потока
• buf/buf0flu. cc: buf_flush_page_coordinator_thread()
24.03.21 103
Подождите, пока все смоется
запросы завершены - Очиститель страниц: координатор потока
• buf/buf0flu.cc: pc_wait_finished()
24.03.21 104 - Очиститель страниц: Координатор темы
• buf/buf0flu.cc: pc_wait_finished()
24.03.21 105
Для всех слотов очистки страниц
Совокупное количество
общее количество сброшенных страниц
Сбросить состояние слота - Очиститель страниц: координатор потока
• buf/buf0flu.cc: buf_flush_page_coordinator_thread()
24.03.21 106
Установите общее количество сброшенных страниц
(LRU + сброс списка сброса) - Очиститель страниц: координатор потока
• buf/buf0flu.cc: buf_flush_page_coordinator_thread()
24.03.21 107
3-й случай: Ничего не изменилось,
но OS_SYNC_TIME_EXCEEDED установлен
4-й случай: Нет активности - КОНТРОЛЬНЫЕ ТОЧКИ MYSQL
24.03.21 108 - Типы контрольно-пропускных пунктов
24.03.21 109
• Острая контрольная точка (при выключении)
⎻ Сброс всех измененных страниц для совершенных транзакций на диск
⎻ Запись LSN самой последней совершенной транзакции
⎻ Все сбрасываемые страницы согласованы по состоянию на один момент времени (
контрольно-пропускной пункт LSN) и «острый»
• Нечеткий контрольно-пропускной пункт (в обычное время)
⎻ Сброс страниц по прошествии времени (сброс списка сбрасывания)
⎻ Высветленные страницы могут не соответствовать друг другу на момент
один момент времени и «нечеткий» - Типы контрольно-пропускных пунктов
24. 03.21 110
• Периодическая проверка (каждые X секунд)
⎻ До версии 8.0 главный поток выполнял периодические контрольные точки.
(каждые 7 с)
⎻ Начиная с версии 8.0, за периодические
контрольные точки (каждый innodb_log_checkpoint_every мс) - Поток контрольной точки журнала
24.03.21 111
• Проверка необходимости записи контрольной точки
⎻ Чтобы уменьшить возраст контрольной точки, прежде чем он станет слишком большим
• Проверка необходимости принудительного синхронного сброса грязных страниц
в потоках очистки страниц из-за места в журнале повторов или возраста
самая старая страница
• Написание контрольных точек
– Это единственный поток, которому разрешено это делать! - Инициализация потока контрольной точки журнала
24.03.21 112
• log/log0log.cc: log_start_background_threads()
…
…
Создайте поток контрольных точек журнала - Поток контрольной точки журнала
24.03.21 113
• log/log0chkp.cc: log_checkpointer()
…
Проверьте, есть ли у него работа - Поток контрольной точки журнала
24. 03.21 114
• log/log0chkp.cc: log_checkpointer() - Поток контрольной точки журнала
24.03.21 115
• log/log0chkp.cc: log_consider_checkpoint()
…
Проверяет, должна ли быть записана контрольная точка - Поток контрольной точки журнала
24.03.21 116
• log/log0chkp.cc: log_should_checkpoint()
… - Поток контрольной точки журнала
24.03.21 117
• log/log0chkp.cc: log_consider_checkpoint()
…
Делает контрольно-пропускной пункт;
Обратите внимание, что эта функция не очищает грязные блоки.
из буферного пула. Он только проверяет, что такое LSN
самая старая модификация в пуле буферов, и
записывает информацию о LSN в лог-файлы. - Поток контрольной точки журнала
24.03.21 118
• log/log0chkp.cc: log_checkpointer()
Если у него нет работы
Ожидает события контрольной точки, пока оно не перейдет в сигнальное состояние.
или превышено время ожидания (10 мс) - Поток контрольной точки журнала
24.03.21 119
• log/log0chkp.cc: log_checkpointer() - Поток контрольной точки журнала
24. 03.21 120
• log/log0chkp.cc: log_checkpointer() - Ссылка
24.03.21 121
[1] «Справочное руководство по MySQL 5.7», MySQL, https://dev.mysql.com/doc/refman/5.7/en/
[2] Джереми Коул, «InnoDB», https://blog.jcole.us/innodb/
[3] Лауринас Бивейнис, Алексей Строганов, «Percona Server для MySQL 5.7: ключевая производительность
Алгоритмы», Percona, https://www.percona.com/resources/webinars/percona-server-
mysql-57-key-алгоритмы производительности
Реклама
PostgreSQL: Документация: 15: 30.5. Конфигурация WAL
Существует несколько параметров конфигурации, связанных с WAL, которые влияют на производительность базы данных. В этом разделе объясняется их использование. Обратитесь к Главе 20 за общей информацией о настройке параметров конфигурации сервера.
Контрольные точки — это точки в последовательности транзакций, в которых гарантируется, что файлы данных кучи и индекса были обновлены всей информацией, записанной до этой контрольной точки. Во время контрольной точки все грязные страницы данных сбрасываются на диск, а в файл журнала записывается специальная запись контрольной точки. (Записи изменений ранее были сброшены в файлы WAL.) В случае сбоя процедура восстановления после сбоя просматривает последнюю запись контрольной точки, чтобы определить точку в журнале (известную как запись повтора), с которой она должна начать Операция ПОВТОР. Любые изменения, внесенные в файлы данных до этого момента, гарантированно будут уже на диске. Следовательно, после контрольной точки сегменты журнала, предшествующие сегменту, содержащему повторную запись, больше не нужны и могут быть переработаны или удалены. (При выполнении архивации WAL сегменты журнала должны быть заархивированы перед повторным использованием или удалением.)
Требование контрольной точки по сбросу всех грязных страниц данных на диск может вызвать значительную нагрузку ввода-вывода. По этой причине активность контрольной точки регулируется таким образом, что ввод-вывод начинается при запуске контрольной точки и завершается до того, как должна начаться следующая контрольная точка; это сводит к минимуму снижение производительности во время контрольных точек.
Серверный процесс контрольной точки периодически автоматически выполняет контрольную точку. Контрольная точка запускается каждые секунды checkpoint_timeout или если max_wal_size вот-вот будет превышен, в зависимости от того, что наступит раньше. Настройки по умолчанию — 5 минут и 1 ГБ соответственно. Если после предыдущей контрольной точки не было записано ни одного WAL, новые контрольные точки будут пропущены, даже если checkpoint_timeout
прошло. (Если используется архивация WAL и вы хотите установить более низкий предел частоты архивирования файлов, чтобы ограничить возможную потерю данных, вам следует настроить параметр archive_timeout, а не параметры контрольной точки.) Также можно принудительно установить контрольную точку. с помощью команды SQL CHECKPOINT
.
Уменьшение checkpoint_timeout
и/или max_wal_size
приводит к более частому появлению контрольных точек. Это позволяет быстрее восстановиться после сбоя, поскольку потребуется переделывать меньше работы. Однако необходимо сбалансировать это с увеличением затрат на более частую очистку грязных страниц данных. Если установлено значение full_page_writes (по умолчанию), необходимо учитывать еще один фактор. Чтобы обеспечить согласованность страниц данных, первое изменение страницы данных после каждой контрольной точки приводит к регистрации всего содержимого страницы. В этом случае меньший интервал между контрольными точками увеличивает объем вывода в журнал WAL, что частично сводит на нет цель использования меньшего интервала и в любом случае приводит к большему дисковому вводу-выводу.
Контрольные точки довольно затратны, во-первых, потому что они требуют записи всех грязных буферов, а во-вторых, потому что они приводят к дополнительному последующему трафику WAL, как обсуждалось выше. Поэтому разумно установить достаточно высокие параметры контрольных точек, чтобы контрольные точки не случались слишком часто. В качестве простой проверки работоспособности ваших параметров контрольных точек вы можете установить параметр checkpoint_warning. Если контрольные точки расположены ближе друг к другу, чем checkpoint_warning
секунд, в журнал сервера будет выведено сообщение с рекомендацией увеличить max_wal_size
. Периодическое появление такого сообщения не является поводом для беспокойства, но если оно появляется часто, то следует увеличить параметры контроля КПП. Массовые операции, такие как большие передачи COPY
, могут вызвать появление ряда таких предупреждений, если вы не установили достаточно большое значение max_wal_size
.
Чтобы избежать перегрузки системы ввода-вывода всплесками операций записи страниц, запись грязных буферов во время контрольной точки распределяется на определенный период времени. Этот период контролируется параметром checkpoint_completion_target, который задается как часть интервала между контрольными точками (настраивается с помощью checkpoint_timeout
). Скорость ввода-вывода настраивается таким образом, чтобы контрольная точка завершалась, когда истечет заданная часть из checkpoint_timeout
секунд или до того, как будет превышено max_wal_size
, в зависимости от того, что наступит раньше. При значении по умолчанию 0,9 можно ожидать, что PostgreSQL завершит каждую контрольную точку немного раньше следующей запланированной контрольной точки (приблизительно за 90% продолжительности последней контрольной точки). Это максимально распределяет ввод-вывод, чтобы нагрузка ввода-вывода контрольной точки была постоянной на протяжении всего интервала контрольной точки. Недостаток этого заключается в том, что продление контрольных точек влияет на время восстановления, поскольку необходимо будет хранить больше сегментов WAL для возможного использования при восстановлении. Пользователь, обеспокоенный количеством времени, необходимым для восстановления, может пожелать уменьшить checkpoint_timeout
, чтобы контрольные точки возникали чаще, но по-прежнему распределяли ввод-вывод по интервалу контрольных точек. В качестве альтернативы checkpoint_completion_target
можно уменьшить, но это приведет к более интенсивному вводу-выводу (во время контрольной точки) и времени меньшего ввода-вывода (после завершения контрольной точки, но до следующей запланированной контрольной точки), и поэтому не рекомендуется . Хотя для checkpoint_completion_target
может быть установлено значение 1,0, обычно рекомендуется устанавливать значение не выше 0,9.(по умолчанию), поскольку контрольные точки включают в себя некоторые другие действия, помимо записи грязных буферов. Значение 1.0, скорее всего, приведет к тому, что контрольные точки не будут завершены вовремя, что приведет к потере производительности из-за неожиданного изменения количества необходимых сегментов WAL.
На платформах Linux и POSIX checkpoint_flush_after позволяет заставить ОС сбрасывать страницы, записанные контрольной точкой, на диск после заданного количества байтов. В противном случае эти страницы могут храниться в кэше страниц ОС, вызывая зависание при fsync
выдается в конце контрольной точки. Этот параметр часто помогает уменьшить задержку транзакций, но также может негативно сказаться на производительности; особенно для рабочих нагрузок, которые больше, чем shared_buffers, но меньше, чем кеш страниц ОС.
Количество файлов сегментов WAL в каталоге pg_wal
зависит от min_wal_size
, max_wal_size
и объема WAL, сгенерированного в предыдущих циклах контрольных точек. Когда старые файлы сегментов журнала больше не нужны, они удаляются или перерабатываются (то есть переименовываются, чтобы стать будущими сегментами в пронумерованной последовательности). Если из-за кратковременного пика скорости вывода лога max_wal_size
превышен, ненужные файлы сегментов будут удалены до тех пор, пока система не вернется к этому пределу. Ниже этого предела система перерабатывает достаточно файлов WAL, чтобы покрыть расчетную потребность до следующей контрольной точки, а остальные удаляет. Оценка основана на скользящем среднем количестве файлов WAL, использованных в предыдущих циклах контрольных точек. Скользящее среднее немедленно увеличивается, если фактическое использование превышает оценку, поэтому оно в некоторой степени учитывает пиковое использование, а не среднее использование. min_wal_size
устанавливает минимальное количество файлов WAL, перерабатываемых для будущего использования; такое большое количество WAL всегда перерабатывается для использования в будущем, даже если система простаивает, а оценка использования WAL предполагает, что требуется небольшое количество WAL.
Независимо от max_wal_size
самые последние wal_keep_size мегабайты файлов WAL плюс один дополнительный файл WAL сохраняются все время. Кроме того, если используется архивация WAL, старые сегменты не могут быть удалены или переработаны до тех пор, пока они не будут заархивированы. Если архивирование WAL не поспевает за темпами создания WAL или если archive_command
или archive_library
повторяется сбой, старые файлы WAL будут накапливаться в pg_wal
, пока ситуация не разрешится. Медленный или неисправный резервный сервер, использующий слот репликации, будет иметь тот же эффект (см. раздел 27.2.6).
В режиме восстановления из архива или режиме ожидания сервер периодически выполняет точки перезапуска , которые аналогичны контрольным точкам при нормальной работе: сервер принудительно записывает все свое состояние на диск, обновляет pg_control
, чтобы указать, что уже обработанные данные WAL не нужно снова сканировать, а затем повторно использует все старые файлы сегментов журнала в каталоге pg_wal
. Точки перезапуска не могут выполняться чаще, чем контрольные точки на первичном сервере, поскольку точки перезапуска могут выполняться только в записях контрольных точек. Точка перезапуска запускается при достижении записи контрольной точки, если с момента последней точки перезапуска прошло не менее checkpoint_timeout
секунд или если размер WAL вот-вот превысит max_wal_size
. Однако из-за ограничений на то, когда может быть выполнена точка перезапуска, max_wal_size
часто превышается во время восстановления на величину до одного цикла контрольной точки WAL. ( max_wal_size
в любом случае никогда не является жестким ограничением, поэтому вы всегда должны оставлять достаточно места, чтобы избежать нехватки места на диске.)
Существуют две часто используемые внутренние функции WAL: XLogInsertRecord
и XLogFlush
. XLogInsertRecord
используется для помещения новой записи в буферы WAL в разделяемой памяти. Если нет места для новой записи, XLogInsertRecord
придется записать (переместить в кеш ядра) несколько заполненных буферов WAL. Это нежелательно, так как XLogInsertRecord
используется при каждой модификации базы данных на низком уровне (например, при вставке строк) в то время, когда на затрагиваемых страницах данных удерживается монопольная блокировка, поэтому операция должна выполняться как можно быстрее. Что еще хуже, запись буферов WAL также может привести к созданию нового сегмента журнала, что занимает еще больше времени. Обычно буферы WAL должны быть записаны и очищены Запрос XLogFlush
, который выполняется, по большей части, во время фиксации транзакции, чтобы гарантировать, что записи транзакций будут сброшены в постоянное хранилище. В системах с большим количеством выходных данных журнала запросы XLogFlush
могут выполняться недостаточно часто, чтобы предотвратить запись XLogInsertRecord
. В таких системах следует увеличить количество буферов WAL, изменив параметр wal_buffers. Когда full_page_writes установлен и система очень занята, установка wal_buffers
поможет сгладить время отклика в течение периода, непосредственно следующего за каждой контрольной точкой.
Параметр commit_delay определяет, сколько микросекунд процесс-лидер групповой фиксации будет бездействовать после получения блокировки в пределах XLogFlush
, в то время как последователи групповой фиксации выстраиваются в очередь позади лидера. Эта задержка позволяет другим серверным процессам добавлять свои записи фиксации в буферы WAL, чтобы все они были очищены возможной операцией синхронизации лидера. Спящий режим не произойдет, если fsync не включен или если в активных транзакциях в настоящее время находится менее чем commit_siblings других сеансов; это позволяет избежать сна, когда маловероятно, что какой-либо другой сеанс будет зафиксирован в ближайшее время. Обратите внимание, что на некоторых платформах разрешение запроса на спящий режим составляет десять миллисекунд, так что любые ненулевые значение commit_delay
от 1 до 10000 микросекунд будет иметь тот же эффект. Также обратите внимание, что на некоторых платформах спящие операции могут занимать немного больше времени, чем требуется параметром.
Так как цель commit_delay
состоит в том, чтобы позволить стоимости каждой операции сброса амортизироваться между одновременно совершаемыми транзакциями (возможно, за счет задержки транзакции), необходимо количественно оценить эту стоимость, прежде чем параметр можно будет выбрать разумно. Чем выше эта стоимость, тем эффективнее 9Ожидается, что 0279 commit_delay увеличит пропускную способность транзакций до определенного момента. Программу pg_test_fsync можно использовать для измерения среднего времени в микросекундах, которое занимает одна операция очистки WAL. Значение, составляющее половину среднего времени, которое, по сообщениям программы, требуется для очистки после одной операции записи 8 КБ, часто является наиболее эффективной настройкой для commit_delay
, поэтому это значение рекомендуется использовать в качестве отправной точки при оптимизации для конкретной рабочей нагрузки. При настройке commit_delay
особенно полезен, когда журнал WAL хранится на вращающихся дисках с высокой задержкой, преимущества могут быть значительными даже на носителях с очень быстрым временем синхронизации, таких как твердотельные накопители или массивы RAID с кэшем записи с резервным питанием от батареи; но это обязательно должно быть проверено на репрезентативной рабочей нагрузке. В таких случаях следует использовать более высокие значения commit_siblings
, тогда как меньшие значения commit_siblings
часто полезны на носителях с более высокой задержкой. Обратите внимание, что вполне возможно, что установка 9Слишком большое значение 0279 commit_delay может увеличить задержку транзакций настолько, что пострадает общая пропускная способность транзакций.
Когда commit_delay
установлен в ноль (по умолчанию), по-прежнему возможно возникновение формы групповой фиксации, но каждая группа будет состоять только из сеансов, достигших точки, когда им необходимо сбросить свои записи фиксации во время окно, в котором происходит предыдущая операция сброса (если она была). При большем количестве клиентов имеет тенденцию возникать «эффект трапа», так что влияние групповой фиксации становится значительным, даже когда commit_delay
равно нулю, поэтому явное задание commit_delay
помогает меньше. Установка commit_delay
может помочь только в том случае, если (1) есть несколько одновременно совершаемых транзакций и (2) пропускная способность в некоторой степени ограничена скоростью фиксации; но с высокой задержкой вращения этот параметр может быть эффективным для увеличения пропускной способности транзакций всего с двумя клиентами (то есть, один фиксирующий клиент с одной родственной транзакцией).
Параметр wal_sync_method определяет, как PostgreSQL будет запрашивать у ядра принудительное сохранение обновлений WAL на диск. Все варианты должны быть одинаковыми по надежности, за исключением fsync_write через
, что иногда может привести к принудительной очистке кэша диска, даже если другие параметры этого не делают. Тем не менее, какая из них будет самой быстрой, зависит от конкретной платформы. Вы можете протестировать скорость различных опций с помощью программы pg_test_fsync. Обратите внимание, что этот параметр не имеет значения, если fsync
отключен.
Включение параметра конфигурации wal_debug (при условии, что PostgreSQL был скомпилирован с его поддержкой) приведет к тому, что каждый XLogInsertRecord
и XLogFlush
Вызов WAL регистрируется в журнале сервера. Этот вариант может быть заменен более общим механизмом в будущем.
Существуют две внутренние функции для записи данных WAL на диск: XLogWrite
и issue_xlog_fsync
. Когда track_wal_io_timing включен, общее количество времени XLogWrite
записи и issue_xlog_fsync
синхронизации данных WAL на диск считается как wal_write_time
и wal_sync_time
в pg_stat_wal соответственно. XLogWrite
обычно вызывается XLogInsertRecord
(когда нет места для новой записи в буферах WAL), XLogFlush
и модулем записи WAL для записи буферов WAL на диск и вызова issue_xlog_fsync
. issue_xlog_fsync
обычно вызывается XLogWrite
для синхронизации файлов WAL с диском. Если wal_sync_method
равно open_datasync
или open_sync
операция записи в XLogWrite
гарантирует синхронизацию записанных данных WAL на диск, а issue_xlog_fsync
ничего не делает. Если wal_sync_method
равно fdatasync
, fsync
или fsync_writethrough
, операция записи перемещает буферы WAL в кэш ядра, а issue_xlog_fsync
синхронизирует их с диском. Независимо от настройки track_wal_io_timing
количество записей XLogWrite
и issue_xlog_fsync
синхронизирует данные WAL с диском, также учитываются как wal_write
и wal_sync
в pg_stat_wal
соответственно.
Параметр recovery_prefetch можно использовать для сокращения времени ожидания ввода-вывода во время восстановления, указав ядру инициировать чтение блоков диска, которые скоро потребуются, но в настоящее время не находятся в пуле буферов PostgreSQL.