Перевіривши пакет SSIS (через те, що SQL Server виконує команди дуже повільно), який був встановлений у нашого клієнта приблизно за 5-4 роки до мого написання цього, я виявив, що були такі завдання: 1 ) вставити дані з XML-файлу в таблицю з назвою [Importbarcdes].
2) команда злиття в іншій цільовій таблиці, використовуючи як джерело згадану таблицю.
3) "видалити з [Імпорт-коди]", щоб очистити таблицю рядка, який був вставлений після прочитання файлу XML завданням пакета SSIS.
Після швидкої перевірки всіх операторів (SELECT, UPDATE, DELETE тощо) таблиці ImportBarcode, які мали лише 1 рядок, знадобилося приблизно 2 хвилини для виконання.
Розширені події показали дуже багато сповіщень про очікування PAGEIOLATCH_EX.
У таблиці відсутні індекси та не було зареєстровано тригерів.
Після ретельного вивчення властивостей таблиці, на вкладці «Зберігання» та в загальному розділі поле «Простір даних» показало більше 6 ГІГАБІТ місця, виділеного на сторінках.
Що трапилось:
Запит виконувався протягом великих порцій часу щодня протягом останніх 4 років, вставляючи та видаляючи дані в таблиці, залишаючи невикористані файли сторінок, не звільняючи їх.
Отже, це була основна причина подій очікування, які були зафіксовані розширеною сесією подій та повільно виконуваних команд на столі.
Запуск ALTER TABLE ImportBarcodes REBUILD
вирішив проблему, звільнивши весь невикористаний простір. TRUNCATE TABLE ImportBarcodes
зробив подібне, з тією лише різницею, що видалив усі файли сторінок та дані.
where [col] = '1'
?