Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) переход 1сv77 базы на  ms sql2005  64х (число прочтений - 11523 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
переход 1сv77 базы на  ms sql2005  64х
20. Ноября 2012 :: 19:58
Печать  
Итак
Дано :
есть высоконагруженная база под 1c77 база данных ms sql 2000 sp3a
конфигурация самописная по многим вещам достаточно оптимизирована и заточена под 1с++
есть новый сервер
ram 32 Гб
Xeon-R  CPU E-52603 @ 1.80 GHz 2 процессора ( 8 ядер )
LSI контролер с кешем  + 8 дисков sas димков, 1 диск ide-sata
ос Windows Server 2008 R2 Standart
sp1



Требуется установить и настроить ms sql2005
Microsoft SQL Server 2005 - 9.00.5000.00 (X64)   Dec 10 2010 10:38:40
  Copyright (c) 1988-2005 Microsoft Corporation  
Standard Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)


Описание будет растянуто по времени
это во первых мне так легче будет все описать
во вторых каждую из глав можно будет отдельно обсудить.

Надеюсь это изложение поможет установить все гораздо быстрее и правильней,
может также кто-то  для себя откроет что-то новое ( в том числе и я в ходе обсуждения этой темы ).

Еще раз подчеркну что речь идет о высоконагруженной  OLTP базе.
Многое из сказаное относится исключительно к настройке ms sql сервера
поэтому может быть применимо не только к базам 1cv77  но и другим ( например v8 )


глава 1. Планирование Дисковой системы.
Так как мы говорим о серьезной нагрузке то на сервере не может быть никаких виртуальных машин.
Все это конечно хорошо ( вирт машины ) и на малых и средних нагрузках это работает,
но при  высоких нагрузках виртуальные машины недопустимы.
Основная причина недопустимости состоит в том, что виртуальная машина значительно снижает скорость
дисковых операций.А дисковые операции и их скорость это основа залога успеха работы ms sql сервера.


Итак если Вы до установки ( в том числе и ОС) все грамотно спланируете - имеется ввиду дисковые ресурсы
сервера то половина успешной установки сервера уже сделана.
И наоборот просчеты и Ошибки в дисковой системе сервера практически ничем исправить
нельзя ( только новая переустановка сервера ).

Выбрана следущая конфигурация (
c: 2 диска raid 1
d: 4 диска raid 10
e: 2 диска raid 1
f: 2 диска raid 1


Почему все сделано на raid - чтобы обеспечить надежность.
Диск с отводиться под операционную систему
диск d отводиться под базу данных файл mdf
диск е под базу tempdb + другие вспомагательные базы данных
диск f отводиться под журнал транзакций базы данных log файл

Примечание если используется os win 2003 то для дисков с данными sql необходимо обязательно установить размер
блока 64 Кб и обеспечивать выравнивание по границе 64 Кб
первоисточник в русскоязычном интернете
Alexander Gladchenko Tips for DBA: выравнивание кластеров NTFS и блоков RAID-массивов
http://msmvps.com/blogs/gladchenko/archive/2008/10/19/1651317.aspx
там же найдете как это преодолеть и англоязычеые ссылкы где это описано.
Для raid массивов под Window 2008 эта ошибка исправлена.
надо назначить только размер блока 64кб (или больше но кратный  64к )

Кратко  почему такая конфигурация
диск с: на отдельный диск ОС. тут все понятно главное чтобы ос не мешала данным ms msq.
диск d: диск для базы данных raid 10 самый производительный массив данных ( и самый дорогой )
обеспечивающий высокую надежность.

Почему файл журнала транзакций вынесен на разные диски.
Все дело в том что ms sql имеет упреждающую запись.
Если подробно то это выглядит так :
предположим  sql серверу передается команда на изменение данных (например update )
происходит это так и никак иначе :
1. Открывается явная или неявная трнзакция информация об этом пишется в журнал транзакций
2. данные с диска закачиваются в память ( если нужные страницы уже в памяти то шаг 2 пропускается )
3. команды , данные и измененные данные заносяться в журнал транзакций
4. фиксируется транзакция информация об этом тоже заноситься в журнал транзакций
5. страница помечается как грязная
6. в будущем страница скидывается из памяти на диск и страница помечается как чистая.

Операции 2-4 синхронные
операция 5 не дисковая.
операция 6 ассинхронная.
задания 1-6 выполняюся непрерывно и паралельно разными процессами.
При этом запись в журнал транзакций идет строго последовательно на запись.
Но все меняется если происходит откат транзакции то чтение из журнала транзакций идет блоками
причем эти блоки не расположены друг за доугом (из-за других множества одновременно пишущих процессов),
одним словом при откате транзакций можно считать что
доступ к журналу транзакций прямой и при этом вся информация об откате
также последовательно пишеться в журнал транзакций.
ну и как бы следствие при откате транзакции sql серверу надо сделать на порядок больше работы
чем при успешной фиксации транзакции.(поэтому по возможности избегайте откатов транзакций).



Т.е. если у Вас есть два конкрурирующих процесса ( самом деле их гораздо больше)
и журнал и mdf файл будут расположены
на одном диске то вполне возможны задержки и на уровне контролера и на уровне диска ( а это особено печально
т.к. скорость перемещения головок очень маленькая по сравнению с другими скоростями ).
Поэтому разнос файлов данных и журналов обкспечивает более лучшую общую производительность
дисковой системы sql сервера. Т.е разные диски обеспечивают разнесение потоков ( без столкновений)
потока данных и потока журнала транзакций.
Еще как дополнительный бонус при выбранной конфигурации дисковой системы
мы избегаем внешней фрагментации файлов(пустячок а приятно) основной базы данных.

На оставшийся диск e вынесена база tempdb и другие вспомогательные базы
тоже вроде все понятно. Microsoft рекомендует по возможности базу tempdb размещать на быстрый диск.
« Последняя редакция: 27. Ноября 2012 :: 16:31 - Z1 »  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #1 - 21. Ноября 2012 :: 05:44
Печать  
Z1 писал(а) 20. Ноября 2012 :: 19:58:
LSI контролер с кешем  + 8 дисков.
...
Выбрана следущая конфигурация (
c: 2 диска raid 1
d: 4 диска raid 10
e: 2 диска raid 1
f: 2 диска raid 1

Итого получается 10 дисков?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #2 - 21. Ноября 2012 :: 07:25
Печать  
pavel_tr писал(а) 21. Ноября 2012 :: 05:44:
Z1 писал(а) 20. Ноября 2012 :: 19:58:
LSI контролер с кешем  + 8 дисков.
...
Выбрана следущая конфигурация (
c: 2 диска raid 1
d: 4 диска raid 10
e: 2 диска raid 1
f: 2 диска raid 1

Итого получается 10 дисков?

Ошибся ( это под sql200 ос стояла на raid1 , сейчас этот диск отдал под tempdb )
диск с обычный диск  т.е

c:  обычный диск  c: 2 диска raid 1 
d: 4 диска raid 10
e: 2 диска raid 1
f: 2 диска raid 1
« Последняя редакция: 28. Ноября 2012 :: 04:35 - Z1 »  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #3 - 21. Ноября 2012 :: 16:48
Печать  
глава 2. Установка ОС и ms sql2005

Устанавливаем ОС.sp на ОС. новые драйверы и.т.д
Устанавливаем  ms sql 2005.
для работы с 1с базами важно для ms sql сервера выставить смешанную авторизацию.
Устанавливаем sp4 на ms sql 2005.
Причем на анг. версию sql ставим английский sp4,
на русскую версию sql ставим русский sp4.

Если в системе есть контролеры с кэшированием на запись то лучше их включить,
но надо знать и помнить что если пропадет питание на сервере то те данные которые
есть в кэше и их нет на диске приведут к ошибкам файлов и как следствие к ошибкам в базе.
Поэтому или надо иметь источник бесперебойного питания или батарейку на кэше контролера
а лучше и то и другое.


Останавливаем все неиспользуемые службы sql ( и переводим их в ручной режим запуска ).
Удаляем все неиспользуемые протоколы для общения с ms sql сервером

Переносим базу tempdb на другой диск с помощью скриптов
Код
Выбрать все
use master
alter database tempdb modify file(name = tempdev,
filename = N'e:\tempdb.mdf')
go
alter database tempdb modify file(name = templog,
filename = N'e:\templog.ldf')
go 


и перезапустить sql server.
При перезапуске sql server  создаст базу tempdb на новом диске,а старые файлы необходимо удалить вручную.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #4 - 21. Ноября 2012 :: 17:06
Печать  
глава 3. Выбор модели восстановления.

как бы варианта два модель восстановления full или simple.
Вам нужно выбрать что именно подходит для Вас.
Рекомендация Microsoft на рабочих базах использовать модель full.

Тем не менее какие я вижу плюсы simple и сам именно ее и использую.
1. Чуть лучшая производительность simple ( меньше информации пишется в журнал транзакций )
2. Не нужно планировать сохранение средствами sql.
Особенно это критично для новичков.
Файл транзакций растет и растет ,а они(новички) ,
или об этом вообще не знают,
или не знают вообще что с этим делать.
3. Значительно меньший объем файла журнала транзакций
у меня размер файла транзакций не превышаем более 20мб и поэтому можно считать
что этот файл всегда в кэше контролера и как следствие имеем более быстрый доступ к этому файлу.
Это происходит потому что в режиме simple  файл транзакций закольцован сам на себя.



Если Вы используете модель simple это совсем не значит что не нужно вообще делать резервные копии.
Обязательно нужно.
и до начала работы с базой (независимо от модели восстановления) у Вас должен быть четкий план
средства и носители для создания резервных копий.

Для себя вопрос с резервными копиями решил так
Используем УРБД и по ночам идет обмен  с Центральной базой ( которая на другом физическом сервере ).
Раз в неделю делается копия базы.

Если Вы помните то под журнал транзакций мы выделили целый  логический диск.
и не просто диск а raid1 (Причем размер одного диска размером 270 Гб) - т.е целых 2 диска.
Реально храним данных 20-30 МБ. ( редкие случаи добавления регистра  и пересчета  таблицы _1sjourn можно не учитывать )
Т.е. в пересчете на байт информации получается очень большая стоимость байта информации,
но как бы это плата за высокую скорость записи данных в журнал транзакций,
т.е плата за быстрый доступ к данным в высоконагруженной  OLTP системе.

SSD диски. Для себя решил все таки их не использовать.
Все таки вероятность их отказа значительно выше и причем может быть не потеря
каких-то единичных блоков , а отказ всего накопителя.
Ведь закон подлости никто не отменял и если такой SSD откажет,
то это обязательно произойдет в самый неподходящий для Вас момент
и последствия могут быть очень печальными и именно для Вас.

Если кто и хочет использовать SSD диски то лучше наверное их ставить на raid1
и для начала ( как самый безопасный вариант ) на SSD
держать только базу tempdb
« Последняя редакция: 22. Ноября 2012 :: 16:09 - Z1 »  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #5 - 21. Ноября 2012 :: 17:36
Печать  
Цитата:
Ведь закон подлости никто не отменял и если такой SSD откажет,
то это обязательно произойдет в самый неподходящий для Вас момент

Вот это бы выделил большим и очень красным шрифтом.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #6 - 22. Ноября 2012 :: 04:53
Печать  
Z1 писал(а) 21. Ноября 2012 :: 17:06:
[b]1. Чуть лучшая производительность simple ( меньше информации пишется в журнал транзакций )

блин, у меня дежавю.
может хватит уже ерунду всякую писать Улыбка
http://www.1cpp.ru/forum/YaBB.pl?num=1338809869/42#42
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #7 - 22. Ноября 2012 :: 05:02
Печать  
Z1 писал(а) 21. Ноября 2012 :: 17:06:
3. Значительно меньший объем файла журнала транзакций
у меня размер файла транзакций не превышаем более 20мб и поэтому можно считать
что этот файл всегда в кэше контролера и как следствие имеем более быстрый доступ к этому файлу.
Это происходит потому что в режиме simple  файл транзакций закольцован сам на себя.

нет никакой разницы.
все измененные страницы всегда пишутся в журнал, что при фулл, что при симпл. кэшу контроллера от симпл модели ни тепло ни холодно.
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #8 - 22. Ноября 2012 :: 15:50
Печать  
trad писал(а) 22. Ноября 2012 :: 04:53:
Z1 писал(а) 21. Ноября 2012 :: 17:06:
[b]1. Чуть лучшая производительность simple ( меньше информации пишется в журнал транзакций )

блин, у меня дежавю.
может хватит уже ерунду всякую писать Улыбка
http://www.1cpp.ru/forum/YaBB.pl?num=1338809869/42#42

(trad) Давай переформулирую по другому
при обращениях из  стандартного 1с клиента (1CV7s.exe) в базу данных  ms sql
в журнал транзакций пишется одна и та же информация не зависимо от модели восстановления.

Но есть некоторые команды create index, select into,bcp которые при
модели восстановления simple пишутся в журнал транзакций в сокращенном виде.

ну я наверное в как то перескочил от 1с sql баз просто к ms sql базам.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #9 - 22. Ноября 2012 :: 16:03
Печать  
trad писал(а) 22. Ноября 2012 :: 05:02:
Z1 писал(а) 21. Ноября 2012 :: 17:06:
3. Значительно меньший объем файла журнала транзакций
у меня размер файла транзакций не превышаем более 20мб и поэтому можно считать
что этот файл всегда в кэше контролера и как следствие имеем более быстрый доступ к этому файлу.
Это происходит потому что в режиме simple  файл транзакций закольцован сам на себя.

нет никакой разницы.
все измененные страницы всегда пишутся в журнал, что при фулл, что при симпл. кэшу контроллера от симпл модели ни тепло ни холодно.



Что происходит (именно в моей бд) в режиме simple
Команда DBCC SQLPERF(LOGSPACE)

Log Size (MB)     Log Space Used (%)
8.4921875         24.120285

И по размеру файла такая ситуация практически всегда.Меняется только процент использования.
В редкие дни размер журнала транзакций достигает 20 Мb. это когда все дружно и вместе лезут в базу
и по какиим то причинам возрастает  число транзакций и файл журнала транзакций увеличивается до 20 Mb.

Так как файл транзакций маленького размера и к нему все время идут обращения можно
считать что физические сектора этого файла все время "горячие".
Умный кэшированный контролер оставит этот горячий маленький файл  8МБ в своем кэше.
Ну а так как он в кэше  и размер файла не меняется то обязательное обнуление нового
виртуального журнала тоже происходит быстрее.




Что происходит в режиме full.
Данные все время пишутся в журнал транзакций. Файл транзакций все время растет.
Поэтому все физические сектора  файла журнала транзакций все время "холодные"
и они не задерживаются в кэше контролера, поэтому при выделении нового
виртуального журнала обнуление будет происходить дольше.
Также что происходит при отказе транзакций.
ms sql должен в обратном порядке "раскрутить" журнал транзакций и восстановить данные до начала этой транзакции.
Это довольно сложное действие, для которого  ms sql серверу надо прочитать страницы
файла журнала транзакций и с очень большой вероятностью данные будут уже на диске и поэтому
откат транзакции будет делаться дольше потому что надо взять данные из физического файла транзакций.

приминительно к моей ситуации при режиме simple и при таком маленьком файле транзакций
при откате транзакции данные вернет кэшированный контролер из своего кэша и так как не будет файловых
операций то откат транзакции произойдет быстрее.



Если предполагать что кэшерованный контролер не очень умный то конечно trad прав и можно
считать что его просто нет между диском и памятью ms sql.
Я же исхожу все таки  из того что кэшированный контролер достаточно умный и вполне способен
разобраться с таким маленьким файлом и поступает как я описал выше.


Все тоже самое написано и в той самой ветке на которую дал ссылку только другими словами.
ну по крайней мере все тоже самое мной и предполагалось.

Более подробно описать размеры и приращения и данных и журнала транзакций я хотел в следующей главе.


Здесь же как бы самое главная мысль главы 3 - перед началом работы с ms sql базой,
необходимо выбрать в каком режиме восстановления будет работать ms sql база.

Ну и надеюсь теперь у Вас есть больше поводов задуматься прежде чем сделать свой выбор в пользу той или иной модели восстановления.



  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #10 - 22. Ноября 2012 :: 16:32
Печать  
скажи, твой умный контроллер знает что такое файл?
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #11 - 23. Ноября 2012 :: 08:06
Печать  
trad писал(а) 22. Ноября 2012 :: 16:32:
скажи, твой умный контроллер знает что такое файл?


да не умный контроллер,
а контроллер с кэшем с оптимизиованными алгоритмами работы  кэша с диском,
и алгоритмы придуманы и воплащены умными людьми.

контролер скорее всего вообще ничего не знает о файлах
скорее всего все общение идет через ioctl блоками кратными 512 байт
( но это тоже только мои предположения)



сейчас своими доморощеными тестами ( поэтому их и не описываю)
проверил работу диска и контролера под реальной, рабочей нагрузкой.
Получается все таки что контролер работает как это я описал.

Если предложишь свою методику тестирования то запущу твой тест
( если это только не нарушит работоспособность userov с базой )
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #12 - 23. Ноября 2012 :: 08:21
Печать  
Z1 писал(а) 23. Ноября 2012 :: 08:06:
trad писал(а) 22. Ноября 2012 :: 16:32:
скажи, твой умный контроллер знает что такое файл?
контролер скорее всего вообще ничего не знает о файлах
скорее всего все общение идет через ioctl блоками кратными 512 байт
( но это тоже только мои предположения)

вот именно - блоками
тогда при чем здесь размер файла?
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #13 - 23. Ноября 2012 :: 15:57
Печать  
Чем меньше размер файла тем меньше в нем блоков,
тем с большей вероятностью все эти "горячие" блоки ( все блоки маленького файла)
остануться в кэше контроллера и будут там всегда.
А почему блоки "горячие" потому что файл журнала транзакций пишется по кругу ( в режиме simple).
и чем меньше круг тем горячее блоки.


Если я увеличу в режиме simple
размер файла журнала транзакций( например командой  ALTER DATABASE ... MODIFY FILE)
в 10 раз: с 8 mb до 80 mb произойдет следущее
количесто VLF возрастет ( на четыре VLF) ,и  при выполнении реальных транзакций
VLF будут последовательно (циклически ) заполняться, а с другого конца освобождается при  CHECKPOINT
но так размер файла больше(то и колво блоков этого файла также больше)
то его блоки будут гораздо холоднее ( ведь скорость заполенния журналов vlf будет такой же -нагрузка
же со стороны пользователей та же самая осталась)
и с гораздо большой вероятностью эти блоки будут выгружены из кэша.

Оптимальный размер приращения журнала транзакций на грани очень глубокого понимания
работы журнала транзакций и слишком большое и слишком малое значения приращения ведут к общей
потери производительности причем неправильное значение более пагубно сказывается
именно в моделе full.
( естественно речь о высоконагруженных база - при малой нагрузке всем этим можно и не заморачиваться вообще)
И причем эта величина зависит от железа, от вида нагрузки на базу и даже от некоторых настроек ms sql сервера.
Т.е. нельзя сказать что мое значение абсолютно точно подойдет для Вашей базы данных на Вашем sql сервере.

у меня установлено для журнала транзакций размер
начальный размер 7 mb  приращение 2 mb
ночью идет шринк на журнал транзакций ( ни вкоем случае не на базу и не на данные )
который обрезает журнал транзакций до 0 ( точнее до 0.5 mb ).
Но если бы у меня не было бы кэшированного контролера с большим кэшем то значение 2 было бы
наверное маленьким но я бы это увидел по слишком частым
приращениям размера и увеличил бы этот размер до 5 mb или 10 mb.( ну и такие маленькие приращения не могут
быть применимы в модели full - потому что будет слишком много VLF а это уже приведет не к плюсу а к большому минусу)
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: переход 1сv77 базы на  ms sql2005  64х
Ответ #14 - 27. Ноября 2012 :: 13:32
Печать  
Цитата:
c: обычный диск на ide

вот это очень настораживает. Крах одного винта с системой (а это не такое уж и редкое явление) приведет к остановке системы... уж лучше одиночный диск под tempdb отдать, хотя имхо под tempdb было бы хорошо SSD (но тут уже надо прикидывать на сколько примерно его хватит)...
« Последняя редакция: 27. Ноября 2012 :: 14:39 - zar »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать