Сборка мусора для выполняемой в памяти OLTP
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Строка данных считается устаревшей, если она была удалена транзакцией, которая больше не активна. Для устаревших строк применяется сборка мусора. Ниже приведены характеристики сборки мусора в OLTP в памяти:
Без блокировки. Сборка мусора распространяется равномерно со временем с минимальным влиянием на рабочую нагрузку.
Совместная. Пользовательские транзакции задействованы в сборке мусора вместе с основным потоком сборки мусора.
Эффективно Пользовательские транзакции удаляют ссылки на устаревшие строки в используемом пути доступа (индексе). Это снижает необходимо рабочую нагрузку после окончательного удаления строки.
Реагирование. Дефицит памяти приводит к агрессивной сборке мусора.
Масштабируемость. Пользовательские транзакции после фиксации выполняют часть работы по сборке мусора. Чем больше выполняется транзакций, тем больше транзакций удаляют ссылки на устаревшие строки.
Сборкой мусора управляет главный поток сборки мусора. Основной поток сборки мусора запускается каждую минуту или при достижении определенного числа запущенных фиксированных транзакций. Задачи сборщика мусора:
Определение транзакций, которые удалили или обновили набор строк и были зафиксированы ранее самых старых активных транзакций.
Определение версий строк, созданных этими старыми транзакциями.
Группирование старых строк в одну или несколько группировок, каждая из которых состоит из 16 строк. Это необходимо для того, чтобы разделить работу сборщика мусора на более мелкие этапы.
Перемещение этих рабочих единиц в очередь сборки мусора по одному для каждого планировщика. Дополнительные сведения см. в динамических представлениях сборщика мусора: sys.dm_xtp_gc_stats (Transact-SQL), sys.dm_db_xtp_gc_cycle_stats (Transact-SQL) и sys.dm_xtp_gc_queue_stats (Transact-SQL).
После фиксации пользовательской транзакции она определяет все элементы, помещенные в очередь, связанную с их выполнением планировщиком, а затем освобождает память. Если очередь в планировщике сборки мусора пуста, то он выполняет поиск всех непустых очередей в текущем узле NUMA. При низкой активности транзакций или дефиците памяти главный поток сборщика мусора может включить в сбор мусора строки из любой очереди. Если после, например, удаления большого числа строк транзакций нет и память не потребляется, сборщик мусора не будет трогать удаленные строки до возобновления транзакций или формирования потребности в памяти.