Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Загрузка SQL БД в память (число прочтений - 4178 )
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Загрузка SQL БД в память
29. Ноября 2008 :: 07:42
Печать  
копался тут очердной раз в просторах тырнета и обнаружил разработку Антона Гусева (a.k.a perlscript) называемую
"Загрузить базу данных SQL в память.ert"

начал смотреть код (изменил под загрузку с 1cpp.dll раньше там была Rainbow)
Цитата:

Процедура Сформировать()
     _Запрос=СоздатьОбъект("ODBCRecordSet");
     _Запрос.УстБД1С();
     _Запрос.Отладка(1);
     
     СЗ=СоздатьОбъект("СписокЗначений");
     ТекстЗапроса="Select RTRIM(CONVERT(char(30),TABLE_NAME)) from INFORMATION_SCHEMA.TABLES
     |WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME<>'dtproperties'";
     
     Попытка
           списокТаблиц = _Запрос.ВыполнитьИнструкцию(ТекстЗапроса,СЗ,1);
     Исключение
           Сообщить(ОписаниеОшибки());
           Возврат;
     КонецПопытки;
     
     Для к=1 по списокТаблиц.РазмерСписка() Цикл
           Попытка
                 имяТаблицы = списокТаблиц.ПолучитьЗначение(к);
                 тз = СоздатьОбъект("ТаблицаЗначений");
                 тз = _Запрос.ВыполнитьИнструкцию("SELECT COUNT(*) as КоличествоСтрок FROM "+имяТаблицы);
                 тз.ВыбратьСтроки();
                 Если тз.ПолучитьСтроку()=1 Тогда
                       Сообщить("В таблице "+имяТаблицы+" строк "+тз.КоличествоСтрок+" ожидается что под неё выделена память");
                 КонецЕсли;
           Исключение
                 Сообщить(ОписаниеОшибки());
                 Возврат;
           КонецПопытки;
         
     КонецЦикла;
     _Запрос.Закрыть();
     Предупреждение("Память для базы данных выделена!",10);
КонецПроцедуры
//________________________________________________________
Процедура ПриОткрытии()
     ЗагрузитьВнешнююКомпоненту("1cpp.dll");
КонецПроцедуры


и вот тут у меня ступор, ткнулся в bol - нигде не написано что подсчет количества записей выделяет память для таблицы

думаю ну ладно запущу - справа на мониторе запущенная обработка, слева анализатор нагрузки sql сервера -  память никак не поменялась - вообще.

Может мне кто-нибудь объяснить тогда что делает эта обработка?





« Последняя редакция: 29. Ноября 2008 :: 11:03 - lustin »  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #1 - 29. Ноября 2008 :: 07:58
Печать  
Ну во-первых. Память необходимо смотреть в счетчиках (DBCC SQLPERF(...), Perfomance Counter) а не в диспетчере задач. Во-вторых для пользователя под которым запущен MS-SQL должно быть разрешено LOCK PAGE IN MEMORY.
В-третьих не приведен размер базы (exec sp_helpdb), размер ОЗУ, начальные показатели и конечные показатели. Также не известна версия сервера (Select @@version).
В-четвертых. Такой dll icpp.dll не существует. Существует проект ICPP, который реализован в dll с именем 1cpp.dll.
  
Наверх
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #2 - 29. Ноября 2008 :: 08:13
Печать  
leshik писал(а) 29. Ноября 2008 :: 07:58:
Ну во-первых. Память необходимо смотреть в счетчиках (DBCC SQLPERF(...), Perfomance Counter) а не в диспетчере задач. Во-вторых для пользователя под которым запущен MS-SQL должно быть разрешено LOCK PAGE IN MEMORY.
В-третьих не приведен размер базы (exec sp_helpdb), размер ОЗУ, начальные показатели и конечные показатели. Также не известна версия сервера (Select @@version).
В-четвертых. Такой dll icpp.dll не существует. Существует проект ICPP, который реализован в dll с именем 1cpp.dll.


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

размер базы говорошь - 42475,44 MB
версия sql server - 8.00.2039 (кстати надо сегодня покопать - на предмет корректности такой версии)

включена ли настройка
http://msdn.microsoft.com/en-us/library/aa198229(SQL.80).aspx
включена

а вообще спасибо - вот теперь стало понятно для чего эта обработка
выходной проходит не зря Улыбка
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #3 - 29. Ноября 2008 :: 08:38
Печать  
Цитата:
странная вообще реакция

просто форум читают не только те кто знают что это именно 1cpp.dll, а также те кто попытается найти icpp.dll.
Цитата:
на предмет корректности такой версии

http://metaprog.co.ua/secrprog/FAQ_SQL.html#_20
Цитата:
а вообще спасибо

не за что! в этом и есть суть форума!
  
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #4 - 29. Ноября 2008 :: 08:40
Печать  
И посмотри еще вот это:
http://metaprog.co.ua/secrprog/FAQ_SQL.html#_23
Может иметь отношение к твоей версии сервера
  
Наверх
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #5 - 29. Ноября 2008 :: 10:53
Печать  
вот копнул так копнул  Улыбка

1. Windows Server 2003 Standart Edition
2. 2 x Opteron dual core (x86 ~1989Mhz)
3. Физически установлено памяти - 8 Gb, доступно 4 Gb
4. SQL Server 8.00.2040 (будет к завтрему, сейчас 2039)
5. хорошо хоть с дисковой на днях вопрос решен
6. а база данных 42 Gb
7. sql client network показывает что по умолчанию стоит NamedPipes, TCPIP правда тоже стоит но ниже уровнем, и почему то выставлен "Общий протокол памяти"

Я тут понимаете с Асторовской логикой разбираюсь, а тут такое
Интуитивно чувствую что настройка сделанна как то не так...

пустили козла в огород, ух я им покажу
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #6 - 29. Ноября 2008 :: 17:26
Печать  
Цитата:
Интуитивно чувствую что настройка сделанна как то не так...

так надо не интуитивно чувствовать, а анализировать данные счетчиков и делать выводы. Могу помочь если надо.
  
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #7 - 29. Ноября 2008 :: 17:27
Печать  
Цитата:
3. Физически установлено памяти - 8 Gb, доступно 4 Gb

в режиме AWE будет доступно больше.
  
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #8 - 29. Ноября 2008 :: 17:29
Печать  
Цитата:
5. хорошо хоть с дисковой на днях вопрос решен

не расскажешь как решен в частности:
1) Модель базы;
2) План обслуживания базы
3) Характеристики дисков и их количество;
4) Организация RAID массива и расположение tempdb, mdf и ldf базы.
?
  
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #9 - 29. Ноября 2008 :: 17:30
Печать  
Цитата:
7. sql client network показывает что по умолчанию стоит NamedPipes, TCPIP правда тоже стоит но ниже уровнем, и почему то выставлен "Общий протокол памяти"

ну я думаю понимаешь, что надо убрать Named Pipes и оставить только TCP/IP, а также проверить последняя ли версия MDAC установлена на клиенте.
  
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #10 - 30. Ноября 2008 :: 08:09
Печать  
leshik писал(а) 29. Ноября 2008 :: 17:27:
Цитата:
3. Физически установлено памяти - 8 Gb, доступно 4 Gb

в режиме AWE будет доступно больше.


Почему зачеркнул?
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #11 - 30. Ноября 2008 :: 10:24
Печать  
Nick писал(а) 30. Ноября 2008 :: 08:09:
leshik писал(а) 29. Ноября 2008 :: 17:27:
Цитата:
3. Физически установлено памяти - 8 Gb, доступно 4 Gb

в режиме AWE будет доступно больше.


Почему зачеркнул?

потому что
http://technet.microsoft.com/en-us/library/cc758523.aspx,
а у человека именно Standart Edition
  
Наверх
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #12 - 30. Ноября 2008 :: 12:22
Печать  
leshik писал(а) 29. Ноября 2008 :: 17:26:
Цитата:
Интуитивно чувствую что настройка сделанна как то не так...

так надо не интуитивно чувствовать, а анализировать данные счетчиков и делать выводы. Могу помочь если надо.

видимо будет надо. но для начала я ознакомлюсь с теми ссылками которые ты мне дал  Улыбка
особенно меня радует
http://www.sql.ru/articles/mssql/03121001PERF_COUNTERs.shtml

  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #13 - 30. Ноября 2008 :: 13:19
Печать  
Улыбка
Ознакамливайся Улыбка
  
Наверх
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Загрузка SQL БД в память
Ответ #14 - 30. Ноября 2008 :: 19:14
Печать  
Если честно, то эта обработка (код приведенный в первом посте) - чепуха. Он просто заставляет MSSQL просканировать все записи всех таблиц базы данных. То что при этом просто считается количество записей - это так.. частный способ достижения результата.
Судя по всему по замыслу автора, т.к. чтобы сосчитать количество записей нужно провести сканирование всей таблицы (это так) сервер прочитает всю таблицу (а это не совсем так), при этом он как порядошный гражданин будет помещать прочитанные страницы в кеш (а вот это так или не так вообще определить сложно), вероятно это и есть по понятию автора загрузить базу в память.
1. Чтобы посчитать количество записей сервер выберет один из индексов и только его страницы будут прочитаны, страницы остальных индексов он читать даже и не подумает, соответственно в кеше их не будет, кроме того чтобы посчитать количество записей достаточно получать только первичные страницы из БД, т.е. вторичные страницы (образуются когда запись не входит на страницу или для BLOB полей) тоже не попадут в кеш.
2. Управление кешем (помещением/выталкиванием) это одна из наисложнейших задач, которую решает сервер - решение зависит от множества параметров - это ноу-хау каждого SQL сервера, и сказать однозначно, что в определенный момент страница осталась в кеше или убралась из кеша очень трудно.

Вобщем: маленькая база, при большом объеме памяти может и разместится в кеше ито не вся.
А вообше для баз солидных размеров задача вообще не правильная - это не нужно.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать