2010-04-07 2 views
2

В SQL Profiler вы можете видеть, что очень простые обновления в таблицу с помощью первичного ключа занимают около 10-30 мс каждый. Примерно каждые 10-е обновление столбец записи показывает , на всех других обновлениях он показывает . Это должно означать, что около 10-го оператора обновления по-прежнему требуется диск IO. Интересно, почему это так. Не будет ли более эффективная очередь до ввода всех операций ввода-вывода до завершения транзакции?Зачем обновлениям внутри транзакции SQL по-прежнему нужен диск IO?

+2

Он в определенной степени ставит в очередь все запросы ввода-вывода. Грязные страницы выписываются партиями, когда происходит контрольный пункт. http://technet.microsoft.com/en-us/magazine/2009.02.logging.aspx –

ответ

4

И где бы вы хотели сохранить эти обновления памяти после обновления таблицы размера, скажем, 10 000 000 записей?

Куда вы хотите купить магазин бланк сделки.

AS plentifull, как кажется RAM, мы не можем предположить, что это бесконечное ...

1

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

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

+0

Почему бы не буферировать несколько мегабайт вместо 10 записей? – usr

+0

10 записей вполне может быть несколько мегабайт. Я не знаю подробностей буферизации MS SQL Server, но обычно ограничения на буферизацию - это последствия соответствия http://en.wikipedia.org/wiki/ACID. – Unreason

Смежные вопросы