Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как избежать двойной буферизации?  [new]
двойной буферизации
Guest
Драйвер файловой системы и СУБД имеют собственные буферные кэши. Как избежать одновременного кэширования одного и того же блока/кластера/страницы данных в ФС и СУБД?
16 авг 12, 03:34    [13018351]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
aleks2
Guest
Не сцы. MS SQL отключает кэширование файловой системы на файлах баз данных и журналах.
Это документировано.
16 авг 12, 06:15    [13018376]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
интересно
Guest
aleks2
Это документировано.

Можно сцылочку ?
16 авг 12, 06:19    [13018379]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
aleks2
Guest
Мог бы и сам найти

http://support.microsoft.com/kb/234656

Во всех версиях SQL Server файлы журнала и данных открываются с помощью функции CreateFile интерфейса Win32. При открытии сервером SQL Server член dwFlagsAndAttributes включает в себя параметр FILE_FLAG_WRITE_THROUGH. 
FILE_FLAG_WRITE_THROUGH
Этот параметр определяет выполнение записи сквозь какой-либо промежуточный кэш непосредственно на диск. Система может кэшировать операции записи, но отложенная запись на диск невозможна.

Параметр FILE_FLAG_WRITE_THROUGH обеспечивает правильное сохранение данных в постоянном хранилище после успешного выполнения операции записи. Это выполняется в соответствии со спецификацией протокола WAL для защиты данных.
16 авг 12, 08:18    [13018457]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
ВклВыкл
Guest
Ну и как этот параметр включить/выключить FILE_FLAG_WRITE_THROUGH?
через sp_configure или ещё каким образом? Не нашел. Есть описание есть прога для тестирования. А как пользоваться параметром не нашел.
16 авг 12, 09:03    [13018552]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
MyNiGoo
Member

Откуда:
Сообщений: 230
CreateFile функция винды, FILE_FLAG_WRITE_THROUGH - параметр этой функции. Вызывается это хозяйство в коде наверное ядра MSSQL. Всегда. Ничего делать больше не нужно.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
16 авг 12, 09:16    [13018601]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
все анонимы
Guest
aleks2,

как человек разбирающийся - объясните, пожалуйста, следующий результат.

Нам понадобится тестовый скрипт:
if object_id( 'dbo.TestWrite' ) is not null
  drop table dbo.TestWrite

create table dbo.TestWrite ( s char(8000) )

insert into dbo.TestWrite ( s )
  select 'a' 
    from ( select top 100 id from master..sysobjects ) x1
    cross join ( select top 100 id from master..sysobjects ) x2

if object_id( 'dbo.TestWrite' ) is not null
  drop table dbo.TestWrite


1. Имеется SQL2008 r2 на обычном ПК (диск баз RAID), Windows XP sp3.
2. В свойствах диска (Свойства\Оборудование и далее Свойства\Политика) ВКЛлючаем галку "Разрешить кэширование записи на диск". Верней, она уже включена там по умолчанию.
3. Запускаем скрипт несколько раз - в среднем 2-3 секунды.
4. ВЫКЛючаем галку. Запускаем скрипт несколько раз - в среднем 15-16 секунд.

Значит где-то кэшируется?
16 авг 12, 09:29    [13018646]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
все анонимы
Значит где-то кэшируется?
Насколько я знаю, в настольных системах кеширование принудительное, приложение на это повлиять не может. Не могу найти ссылку на доку, но знаю об этом давно...
16 авг 12, 09:33    [13018659]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
aleks2
Guest
все анонимы
aleks2,

как человек разбирающийся - объясните, пожалуйста, следующий результат.

Нам понадобится тестовый скрипт:
if object_id( 'dbo.TestWrite' ) is not null
  drop table dbo.TestWrite

create table dbo.TestWrite ( s char(8000) )

insert into dbo.TestWrite ( s )
  select 'a' 
    from ( select top 100 id from master..sysobjects ) x1
    cross join ( select top 100 id from master..sysobjects ) x2

if object_id( 'dbo.TestWrite' ) is not null
  drop table dbo.TestWrite


1. Имеется SQL2008 r2 на обычном ПК (диск баз RAID), Windows XP sp3.
2. В свойствах диска (Свойства\Оборудование и далее Свойства\Политика) ВКЛлючаем галку "Разрешить кэширование записи на диск". Верней, она уже включена там по умолчанию.
3. Запускаем скрипт несколько раз - в среднем 2-3 секунды.
4. ВЫКЛючаем галку. Запускаем скрипт несколько раз - в среднем 15-16 секунд.

Значит где-то кэшируется?


0. Я не могу воспроизвести ваши результаты - у мя все ровно (SQL2008 r2 на обычном ПК (диск бeз RAID), Windows 7 64bit).
1. Кроме кэширования ЗАПИСИ, о котором собственно и был базар, есть ишо кэширование ЧТЕНИЯ.
2. Кэширование диска используется ДРУГИМИ программами и системой.
16 авг 12, 09:46    [13018714]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
все анонимы
Guest
Пробую на сервере Windows Server 2008 R2, SQL 2008 R2, диски без RAID - воспроизводится.

Имеется два одинаковых диска WD, на одном галка включена, на другом выключена. Система стоит на другом, третьем диске.
Создаем 2 тестовых БД на разных дисках. На одной результат меньше секунды, на другой в среднем 12-13 секунд.

Получается, что не во всех случаях кэш отключается? Или я что-то не так делаю.

Попробую еще на окрестных компьютерах, понаблюдаю.
Ну и если тут кто-то захочет потестировать, просьба написать результат.
16 авг 12, 10:33    [13018917]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Windows Server 2008 R2, SQL 2008 R2, RAID 1+0
4 сек.
16 авг 12, 11:16    [13019143]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
tunknown
Member

Откуда:
Сообщений: 763
alexeyvg
все анонимы
Значит где-то кэшируется?
Насколько я знаю, в настольных системах кеширование принудительное, приложение на это повлиять не может. Не могу найти ссылку на доку, но знаю об этом давно...


Имеется в виду это?
Maximize Throughput for Network Applications
16 авг 12, 11:50    [13019393]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
tunknown
alexeyvg
пропущено...
Насколько я знаю, в настольных системах кеширование принудительное, приложение на это повлиять не может. Не могу найти ссылку на доку, но знаю об этом давно...


Имеется в виду это?
Maximize Throughput for Network Applications
Это вроде только к сети относится...
16 авг 12, 11:53    [13019418]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
tunknown
Member

Откуда:
Сообщений: 763
alexeyvg
Это вроде только к сети относится...


Точную ссылку найти сходу не удаётся, но смысл тот же
LargeSystemCache

"Maximize data throughput for network applications" обычно стоит на сервере, но не на рабочей станции. Может ли оно относится к данному случаю- не ясно.
16 авг 12, 11:58    [13019460]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
все анонимы
Guest
Коллеги, обратите внимание на пост выше 13018917 - на серверной ОС Win 2008 R2 у нас тоже кэшируется, не только на десктопе.
16 авг 12, 12:54    [13019841]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
все анонимы
Пробую на сервере Windows Server 2008 R2, SQL 2008 R2, диски без RAID - воспроизводится.

Имеется два одинаковых диска WD, на одном галка включена, на другом выключена. Система стоит на другом, третьем диске.
Создаем 2 тестовых БД на разных дисках. На одной результат меньше секунды, на другой в среднем 12-13 секунд.

Получается, что не во всех случаях кэш отключается? Или я что-то не так делаю.

Попробую еще на окрестных компьютерах, понаблюдаю.
Ну и если тут кто-то захочет потестировать, просьба написать результат.
Вы путаете кеш контроллера диска и кеш операционной системы. Кеш OC отключает сам сервер через FILE_FLAG_WRITE_THROUGH. Кеш контроллеров дисков вы можете включать и выключать вашими галками.
16 авг 12, 13:09    [13019948]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
все анонимы
Guest
Гавриленко Сергей Алексеевич
Вы путаете кеш контроллера диска и кеш операционной системы. Кеш OC отключает сам сервер через FILE_FLAG_WRITE_THROUGH. Кеш контроллеров дисков вы можете включать и выключать вашими галками.

Спасибо.
16 авг 12, 13:32    [13020195]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
aleks2
Guest
все анонимы
Гавриленко Сергей Алексеевич
Вы путаете кеш контроллера диска и кеш операционной системы. Кеш OC отключает сам сервер через FILE_FLAG_WRITE_THROUGH. Кеш контроллеров дисков вы можете включать и выключать вашими галками.

Спасибо.

Эти галки управляют именно кэшем ОСи.

К сообщению приложен файл. Размер - 81Kb
16 авг 12, 15:53    [13021467]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
двойной буферизации
Guest
aleks2
Мог бы и сам найти

http://support.microsoft.com/kb/234656

...
FILE_FLAG_WRITE_THROUGH
Этот параметр определяет выполнение записи сквозь какой-либо промежуточный кэш непосредственно на диск. Система может кэшировать операции записи, но отложенная запись на диск невозможна...

А как можно кэшировать операции записи не откладывая саму запись или имеется ввиду писать сразу, но оставлять данные в кэше ФС для последующего чтения?

И кэш ФС на чтение MS SQL использует?
16 авг 12, 17:00    [13022020]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
aleks2
Guest
двойной буферизации
И кэш ФС на чтение MS SQL использует?

А почему нет? Этот кэш не нарушает принципов WAL.
16 авг 12, 17:28    [13022235]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
повторного кэширования
Guest
aleks2
двойной буферизации
И кэш ФС на чтение MS SQL использует?

А почему нет? Этот кэш не нарушает принципов WAL.

А сама MS SQL не кэширует данные, т.е. нет повторного кэширования на чтение одного и того же блока в ФС и MS SQL?
16 авг 12, 17:46    [13022343]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
aleks2
все анонимы
пропущено...

Спасибо.

Эти галки управляют именно кэшем ОСи.
А чего это вдруг стал кэш ОСи, когда там написано, что это свойства диска?
16 авг 12, 21:19    [13023247]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
повторного кэширования
aleks2
пропущено...

А почему нет? Этот кэш не нарушает принципов WAL.

А сама MS SQL не кэширует данные, т.е. нет повторного кэширования на чтение одного и того же блока в ФС и MS SQL?
MS SQL кэширует данные. Я не понимаю только к чему вы клоните.
16 авг 12, 21:21    [13023253]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
aleks2
Guest
Mind
aleks2
пропущено...

Эти галки управляют именно кэшем ОСи.
А чего это вдруг стал кэш ОСи, когда там написано, что это свойства диска?


Да так уж вышло.
17 авг 12, 05:48    [13024179]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать двойной буферизации?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
aleks2
Mind
пропущено...
А чего это вдруг стал кэш ОСи, когда там написано, что это свойства диска?


Да так уж вышло.
Вы же выше говорили, что кэш ОСи выключен в сиквеле принудительно и никак не регулируется? А тут вдруг какие то галки для кэша ОС, от которых зависит скорость записи на диск из сиквела. Что-то вы путаетесь в показаниях.
17 авг 12, 08:55    [13024383]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить