Сообщение T-SQL Restore Database на самом деле отложенный 100 проценто от 13.01.2025 13:56
Изменено 13.01.2025 14:50 VladCore
T-SQL Restore Database на самом деле отложенный 100 проценто
Обнаружил такое интересное вредное поведение в такой древней операции как Restore Database
Если сразу после restore сделать
то профайлер показывает ровно то количество чтений страниц у этого select сверху, сколько весит таблица. Вместо нуля.
Получается при любом select в том числе такой как выше, sql server вычитывает всю таблицу целиком
При этом для backup сделаны все условия что бы такого не происходило. Бекап полный и ровно один. При бекапе любые транзакции отсутствуют гарантированно в том числе на чтение. Плюс у базы при бекапе включена Simple Recovery Mode еще при создании.
Другими словами в бекапе всё максимально целостное.
Как это можно настроить?
Есть ли что то типа dbcc что бы это убрать?
Ну и самое главное. Если будет запрос который некий индекс будет использовать то этот очередной запрос тоже весь индекс вычитает полностью при первом вызове после restore?
Если сразу после restore сделать
Select count(1) From [Any Table] Where 1=2то профайлер показывает ровно то количество чтений страниц у этого select сверху, сколько весит таблица. Вместо нуля.
Получается при любом select в том числе такой как выше, sql server вычитывает всю таблицу целиком
При этом для backup сделаны все условия что бы такого не происходило. Бекап полный и ровно один. При бекапе любые транзакции отсутствуют гарантированно в том числе на чтение. Плюс у базы при бекапе включена Simple Recovery Mode еще при создании.
Другими словами в бекапе всё максимально целостное.
Как это можно настроить?
Есть ли что то типа dbcc что бы это убрать?
Ну и самое главное. Если будет запрос который некий индекс будет использовать то этот очередной запрос тоже весь индекс вычитает полностью при первом вызове после restore?
T-SQL Restore Database на самом деле отложенный 100 проценто
Обнаружил такое интересное вредное поведение в такой древней операции как Restore Database
Если сразу после restore сделать
то профайлер показывает ровно то количество чтений страниц у этого select сверху, сколько весит таблица. Вместо нуля.
Получается при любом select в том числе такой как выше, sql server вычитывает всю таблицу целиком
При этом для backup сделаны все условия что бы такого не происходило. Бекап полный и ровно один. При бекапе любые транзакции отсутствуют гарантированно в том числе на чтение. Плюс у базы при бекапе включена Simple Recovery Mode еще при создании.
Другими словами в бекапе всё максимально целостное.
Как это можно настроить?
Есть ли что то типа dbcc что бы это убрать?
Ну и самое главное. Если будет запрос который некий index seek будет использовать то этот очередной запрос тоже весь индекс вычитает полностью при первом вызове после restore?
Если сразу после restore сделать
Select count(1) From [Any Table] Where 1=2то профайлер показывает ровно то количество чтений страниц у этого select сверху, сколько весит таблица. Вместо нуля.
Получается при любом select в том числе такой как выше, sql server вычитывает всю таблицу целиком
При этом для backup сделаны все условия что бы такого не происходило. Бекап полный и ровно один. При бекапе любые транзакции отсутствуют гарантированно в том числе на чтение. Плюс у базы при бекапе включена Simple Recovery Mode еще при создании.
Другими словами в бекапе всё максимально целостное.
Как это можно настроить?
Есть ли что то типа dbcc что бы это убрать?
Ну и самое главное. Если будет запрос который некий index seek будет использовать то этот очередной запрос тоже весь индекс вычитает полностью при первом вызове после restore?