![]() |
![]() |
![]() |
|
И снова производительность SQL сервера | ☑ | ||
---|---|---|---|---|
0
nkleopa
16.06.11
✎
18:14
|
Добрый день!
Имеется следующая конфигурация: Бух 2.0 практически типовая(дописан 1 документ) Платформа 8.2.13.213 8 пользователей SQL 2005 на отдельном сервере Сервер 1С на отдельном сервере 2 рабочих процесса на 1С сервере Сервера не "задыхаются", вроде все нормально в плане ресурсов. На SQL каждое утро выполняются задания, рекомендованные в базе знаний крупных внедрений сайта 1С. Вроде все описал достаточно подробно. Проблема заключается в том, что отчет "Карточка счета" с отбором по одному контрагенту формируется в общей сложности около 10 секунд, что сильно раздражает бухгалтерию. ОСВ, кстати, с таким же отбором по контрагенту формируется меньше 2х секунд. В качестве лечения проблемы немного поубивали фоновые задания по обновлению индекса полнотекстового поиска, перенесли SQL на отдельный сервер, добавили еще 1 рабочий процесс в сервер 1С и ребутим агент кластера каждую ночь. В сумме все эти движения дали выигрыш буквально в 1-2 секунды. Намедни через ТЖ отловили, что около 8 секунд выполняются запросы на стороне SQL. Ах да, на файловой версии базы этот же отчет формируется за 2 секунды. Теперь, собственно, вопросы: 1. Правильно ли мы определили, что узкое место в SQL? 2. Если да, то что можно с ним сделать, чтобы хотя бы ополовинить время выполнения запроса? 3. Может ли помочь обновление платформы на грядущую 8.2.14? 4. Почему вообще такая глупость происходит - у супер-пупер СУБД производительность в несколько раз меньше, чем у встроенного файлового 1Совского решения? Спасибо большое за адекватные ответы. |
|||
1
Живой Ископаемый
16.06.11
✎
18:17
|
"4. Почему вообще такая глупость происходит - у супер-пупер СУБД производительность в несколько раз меньше, чем у встроенного файлового 1Совского решения? " - гораздо интереснее другое - откуда такая глупость что серверная СУБД должна быть быстрее?
|
|||
2
BigShmax
16.06.11
✎
18:20
|
(1) на уровне отчета как правило быстрее
|
|||
3
Живой Ископаемый
16.06.11
✎
18:21
|
(2)показывай пруфлинк
|
|||
4
SUA
16.06.11
✎
18:22
|
4. sql медленнее. но работает и не ломает базу.
отчет или нет тут не при чем - локальное получение данных быстрее по умолчанию чем обратиться к серверу... задействовать его механизмы... дождаться ответа... вернуть результат |
|||
5
Живой Ископаемый
16.06.11
✎
18:26
|
2(0)
"1. Правильно ли мы определили, что узкое место в SQL? 2. Если да, то что можно с ним сделать, чтобы хотя бы ополовинить время выполнения запроса? " скорее всего да... сама "8.2.14" не спасет и ничего не ускорит, но у нее в настройках ТЖ есть такая опция, как показывать план выполняемого СКЛ-запроса... вот она вам может сильно помочь. В принципе можно и без нее, но тогда все разбивается на два этапа: а) поймать ваш запрос В ТЖ, б)потом уже попытаться его выполнить в СКЛ или посмотреть планы. у СКЛ-я же есть уже крутилки которые могут вам помочь ускорить выполнение запроса. по крайней мере в ДБ2 они точно есть, а стало быть и у МС должны быть |
|||
6
nkleopa
16.06.11
✎
22:34
|
"крутилки SQL" в гугле не находятся :)
Подскажи поконкретнее, что именно искать надо? |
|||
7
skunk
16.06.11
✎
22:37
|
забавные бывают порой одинэсники
|
|||
8
Reaper_1c
16.06.11
✎
22:39
|
(0) Уверен что 10 сек. стоят затраченных усилий?
|
|||
9
ДенисЧ
16.06.11
✎
22:40
|
(6) для начала профайлером ловим запрос в скуле, потом в студии смотрим план запроса.
|
|||
10
Попытка1С
16.06.11
✎
22:48
|
Обновление статистики, дефрагментация индексов.
|
|||
11
AaNnDdRrEeYy
16.06.11
✎
22:49
|
(10) а это точно выполнение запроса а не передача полученных данных по сети? карточка счета бывает очень большой.
|
|||
12
Rovan
гуру
16.06.11
✎
23:26
|
(0) "На SQL каждое утро выполняются задания, рекомендованные в базе знаний крупных внедрений сайта 1С."
какие точно ? |
|||
13
Kuzen
17.06.11
✎
01:35
|
(0) В отладчике именно выполнение запроса выполняется 10 секунд?
|
|||
14
H A D G E H O G s
17.06.11
✎
01:57
|
Надо смотреть запрос.
А то будет как в v8: Очень много записей в справочнике или регистре сведений (пост 146, 149) |
|||
15
nkleopa
17.06.11
✎
09:46
|
Не нашел, как на этом форуме отвечать на конкретные посты, поэтому отвечу по порядку:
1. Мое руководство уверенно, что эти 10 секунд стоят того. 2. А что даст этот план запроса? Я у Гилева пробежался по статье про план запроса, но сути не понял. Отчет то типовой, лезть в 1Сный код и исправлять там что то не буду, или можно сам SQL "заточить" под выполнение конкретного запроса? 3. В карточке счета буквально пара-тройка записей. 4. Вот такие задания: Обновление статистик Очистка процедурного КЭШа Дефрагментация индексов Реиндексация таблиц базы данных 5. Это я посмотрел через замер производительности. Конкретно вот эта строка из общего модуля: ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина); выполняется 6-9 секунд. 6. Эммм... Запрос типовой(Отчет "Карточка счета"), вносить изменения в эти типовые механизмы ну оооочень не хочется - у нас конфа почти не настроенная. |
|||
16
Живой Ископаемый
17.06.11
✎
10:58
|
2(15) "ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина); " - то есть все-таки вывод долгий а не выполнение запроса?
|
|||
17
Defender aka LINN
17.06.11
✎
11:03
|
(15) Если не знаешь, что даст план запроса, то лучше не лезь. Позовите спеца по MSSQL, пусть он смотрит.
|
|||
18
byxtello
17.06.11
✎
11:06
|
на всякий случай спрошу - версия sql и параметры сервера
|
|||
19
rs_trade
17.06.11
✎
11:09
|
(15) А что даст этот план запроса? Я у Гилева пробежался по статье про план запроса, но сути не понял.
Читай до просветления. Без этих знаний не быть тебе спецом. |
|||
20
nkleopa
17.06.11
✎
11:14
|
Да как же тут отвечать на пост, блин!
1. Я не знаю, куда ложится нагрузка при выполнении этой строки. Если проблема в "долгом выводе", то кто виноват? 2. Насколько я понимаю план запроса "расскажет" о том, где можно оптимизировать запрос. Индексы там включить или ребилднуть чего. Но для этого нужно лезть в 1Совский код и править его, что трудновыполнимо. 3. SQL 2008 R2. Да, в самом я начале с версией я обманул. Парметры железные или софтверные? 4. Спасибо, капитан. |
|||
21
byxtello
17.06.11
✎
11:15
|
(20.3) версия SQL - может экспресс стоит :)
|
|||
22
Azverin
17.06.11
✎
11:15
|
в скобки номер (20)
|
|||
23
ptiz
17.06.11
✎
11:16
|
(0) Памяти на сервере SQL сколько? И какой SQL стоит - 32 или 64?
|
|||
24
nkleopa
17.06.11
✎
11:17
|
(21) Нет, точно "взрослый" :)
(22) Спасибо! (23) Только в понедельник смогу ответить - сегодня главного SQLщика нет. |
|||
25
byxtello
17.06.11
✎
11:20
|
(24) смотреть сначала что на поверхности - параметры сервера sql, сеть между серверами, общая сеть, параметры рабочей станции
|
|||
26
rs_trade
17.06.11
✎
11:22
|
(25) какие на хрен параметры. если дело касается производительности конкретного запроса, смотрят план запроса в первую очередь.
|
|||
27
rs_trade
17.06.11
✎
11:25
|
8 пользователей
SQL 2005 на отдельном сервере тут все по дефолту должно летать (23) разрядность вообще пофигу. |
|||
28
byxtello
17.06.11
✎
11:25
|
(26) когда перестает работать телевизор сразу с паяльником лезешь или сначала автомат проверяешь ?
в типовой конфигурации я бы смотрел профайлер в последнюю очередь |
|||
29
nkleopa
17.06.11
✎
11:28
|
(25)но ведь ОСВ по счету с отборами формируется быстро! Разве это не указывает, что общих проблем нет?
(26)допустим, я там увижу, что там 3 вложенных запроса и все они без индекса(ну или как правильнее сказать? в общем, не индексированная таблица используется), что тогда делать? |
|||
30
rs_trade
17.06.11
✎
11:28
|
(28) крутить настройки, это и есть паяльник. а план запроса это тестер, который покажет тебе что и как.
|
|||
31
ptiz
17.06.11
✎
11:30
|
(27) Если у него сервак х32 и настроен на потребление 1.7Гб озу - это может влиять.
|
|||
32
Живой Ископаемый
17.06.11
✎
11:35
|
2(20) "Я не знаю, куда ложится нагрузка при выполнении этой строки. Если проблема в "долгом выводе", то кто виноват? "
так почему же и отчего же ты до сих пор не настроил ТЖ чтобы это выяснить? Ведь там раскладывается каеждая операция и пишется длительность в милисекундах "о для этого нужно лезть в 1Совский код и править его, что трудновыполнимо. " - безусловно не надо. |
|||
33
Живой Ископаемый
17.06.11
✎
11:39
|
как для ДБ2 то самое главное что можно сделать для ускорения - это чтобы данные уже лежали не на диске, а в памяти.. то есть в буферпулах(кэш в терминах ИБМ). при чем там такой фокус - типа можно ничего не трогать и все делается автоматом, но автоматом ДБ2 экономная, и буферпул расширяет только постепенно. А можно взять и сказать: тетка, вот эти два буферпула пусть будут вот такими большими - и потом просто взять и сформиовать все что что можно один раз - и возможно в первый раз картачка будет строиться тоже 10 секунд, но уже во второй - 2 секунды.
|
|||
34
nkleopa
17.06.11
✎
11:40
|
(32)я настроил ТЖ, который пишет обращения к SQL, посмотрел его парсером, скачанным с инфостарта, нашел несколько SQL запросов, которые в общей сложности выполняются около 8 секунд. Запросы там гигантские, и, на мой мой непрофессиональный взгляд, не самые оптимальные.
|
|||
35
byxtello
17.06.11
✎
11:44
|
(34) rls используется ?
|
|||
36
nkleopa
17.06.11
✎
11:44
|
(33)"первый раз" имеешь в виду, что каждый раз, когда пользователю нужно будет сформировать карточку первое формирование будет долгим, а потом быстрым?
Но пользователю же нужно эту карточку 1 раз только посмотреть, ей второй раз, тащемта, и не нужен уже. |
|||
37
rs_trade
17.06.11
✎
11:45
|
(34) на мой мой непрофессиональный взгляд, не самые оптимальные.
Зачет! 1. Получи свой проблемный запрос в скомпилированном виде 2. Открываешь Microsoft SQL Server Management Studio 3. Вставляешь туда скомпиленый запрос 4. Нажимаешь кнопочку Include Actual Execution Plan 5. Жмешь кнопочку Execute |
|||
38
Живой Ископаемый
17.06.11
✎
11:45
|
2(36) нет, первый раз после того как я скажу db2 start
|
|||
39
Живой Ископаемый
17.06.11
✎
11:46
|
сервер про пользователей вообще ничего не знает, он обслуживает одного пользователя - сервер 1С
|
|||
40
nkleopa
17.06.11
✎
11:56
|
(35) не знаю. Смогу сказать в понедельник.
(37) тогда встает другая проблема - у меня тяжелый запрос кончается ничем: UNION SELECTT6._RecorderTRef AS RecorderTRef,T6._RecorderRRef AS RecorderRRef,T6._LineNo AS LineNo_FROM _AccRg453 T6 WITH(NOLOCK)INNER JOIN _AccRgED489 Очевидно, что после "INNER JOIN _AccRgED489" должны быть условия. Это скачанный парсер - лох или такая 1Совская фича? (38) а SQLный аналог понятия "буферпул" не знаешь случайно? |
|||
41
Живой Ископаемый
17.06.11
✎
12:02
|
точно не знаю, думаю - кэш...
|
|||
42
nkleopa
17.06.11
✎
12:04
|
(41) в любом случае спасибо за мысль. кое-что гуглится.
|
|||
43
Reaper_1c
17.06.11
✎
12:05
|
(40) нету аналога прямого, равно как и динамической настройки для лучшей производительности. Можно закреплять таблицы/индексы в кэше, но не более.
|
|||
44
rs_trade
17.06.11
✎
12:09
|
(40) так же очевидно что до UNION должен быть запрос. скорей всего это ты так выдернул его. куском.
|
|||
45
упс
17.06.11
✎
12:10
|
(43) это вы про PINTABLE?
"Инструкция DBCC PINTABLE не является необходимой, и была удалена для предотвращения дополнительных проблем. Синтаксис этой команды все еще работает, но не влияет на сервер." http://msdn.microsoft.com/ru-ru/library/ms178015(v=sql.90).aspx |
|||
46
nkleopa
17.06.11
✎
12:23
|
(44) там большущий запрос, я выложил только концовку. Могу целиком, если это принципиально.
|
|||
47
rs_trade
17.06.11
✎
12:24
|
(46) план этого запроса нужен. а не сам запрос.
|
|||
48
asyr83
17.06.11
✎
12:28
|
может повторюсь, все не читал. включены ограничения на уровне записей? если да то от них ооочень сильно зависит размер запроса sql к бд...сам имею подобную проблему.
|
|||
49
nkleopa
17.06.11
✎
12:35
|
(47)ок. Возвращайся в понедельник смотреть его.
(48) а это что и где? Сейчас читаю по поводу памяти, отведенной SQL серверу - если поставить минимальный порог не динамически, а, к примеру, 1Гб - может ли это помочь закэшировать необходимые таблицы? |
|||
50
asyr83
17.06.11
✎
12:37
|
(49) для начала скажи как формируется отчет у пользователя с полными правами. если так же медленно, то я не прав.
|
|||
51
nkleopa
17.06.11
✎
12:37
|
(50)ты не прав :)
|
|||
52
asyr83
17.06.11
✎
12:38
|
пардон)
|
|||
53
ptiz
17.06.11
✎
12:38
|
(49) Нет смысла ставить минимум. Он всё равно сожрет больше :) Гига 4 хотя бы ему дайте.
|
|||
54
Живой Ископаемый
17.06.11
✎
12:41
|
2(53) он имеет в виду минимум задать сразу большой.
|
|||
55
nkleopa
17.06.11
✎
12:46
|
(54) да, именно так.
Физически на этом сервере памяти 4Гб, кроме SQL им никто не пользуется, в настройках памяти стоит от 0 до 2147483647Мб. |
|||
56
упс
17.06.11
✎
12:49
|
(49) нет - это не поможет. Если вы поставите минимум 1 гб памяти, sql server будет "зажимать" для себя этот гиг. Т.е. если ОС или какое-нибудь приложение затребует себе память - он этот гиг, даже если ему не сильно-то и нужно, не отдаст.
Причем, это не значит, что он его сразу себе возьмет. Если ему хватает 512 мб, он только их и возьмет. А вот если захавает больше 1 гига - то уже "не отпустит". |
|||
57
H A D G E H O G s
17.06.11
✎
12:51
|
(56) Хренас с два.
Если SQL отработал - он все в кэш засосал и память хрен отдаст. |
|||
58
rs_trade
17.06.11
✎
12:53
|
А если новую базу, типовую, этот же релиз, демку, развернуть на этом сервере и попробовать сформировать подобный отчет?
|
|||
59
zzerro
17.06.11
✎
12:53
|
(0) Я бы для начала твой запрос скопировал бы и попробовал выполнить в консоли запросов, и посмотрел за какое время он тебе результат выплюнет... Может и не в запросе дело то, а в выводе данных
|
|||
60
упс
17.06.11
✎
12:56
|
(57) >>Если SQL отработал - он все в кэш засосал и память хрен отдаст.
если min server memory не установлено? |
|||
61
nkleopa
17.06.11
✎
12:56
|
(56) как я рассуждаю: "если у сервера стоит минимум 0, то он будет всегда стремится очищать(высвобождать память). Соответственно, если я формирую свой отчет, то он что то берет в кэш, а потом сразу отпускает, потому что нужно освобождать память. Если не нужно освобождать, то есть вероятность, что он оставит эту табличку в кэше и в следующий раз запрос будт формироваться быстрее".
(58) мысль! попробую. (59) ТЖ мне полностью запрос на дает, profiler'ом сейчас не могу воспользоваться, но за идею спасибо. |
|||
62
упс
17.06.11
✎
12:58
|
(61) если это на сервере единственное приложение и ему не с кем бодаться за память - фиг он ее будет сам освобождать, с этим можете не париться.
|
|||
63
Живой Ископаемый
17.06.11
✎
13:00
|
2(61) запрос который в консоли выполнять можно выцепить отладчиком
|
|||
64
ptiz
17.06.11
✎
13:54
|
(55) Наконец! Из чего можно сделать вывод, что сервак у вас, скорее всего х32 и SQL реально ест 1.7 Гб. Если база уже 5 гиг и больше, надо бы перейти на х64 и памяти SQL добавить.
|
|||
65
PowerBoy
17.06.11
✎
14:08
|
(0) 10 сек. много - да вы зажрались :)))
|
|||
66
nkleopa
17.06.11
✎
14:12
|
(64) База весит всего 2.2 Гига
|
|||
67
rs_trade
17.06.11
✎
14:50
|
(64) с чего такие выводы?
|
|||
68
Живой Ископаемый
17.06.11
✎
14:53
|
(67)он же сказал "скорее всего" а не "сто процентов"
а так как ТС не сообщает потребляемую СКЛ-сервоом память, то возникла вот такая спекуляция. |
|||
69
ptiz
17.06.11
✎
15:02
|
(66) Потихоньку вытягиваем из партизана циферки...
Тогда смотрите счетчики производительности на SQL-сервере при выполнении запросов. |
|||
70
rs_trade
17.06.11
✎
15:06
|
(68)4 гига более чем достаточно для данной нагрузки.
(64) Если база уже 5 гиг и больше, надо бы перейти на х64 и памяти SQL добавить А как интересно раньше, когда не было х64 крутились на скуле, да и не только базы размерами по несколько сотен гигабайт? |
|||
71
Живой Ископаемый
17.06.11
✎
15:07
|
2(70) это Интела не было х64, но была Альфа, и на ней был МС СКЛ сервер...
|
|||
72
zaki
17.06.11
✎
15:59
|
Проверил у себя на Буге КОРП карточку счета по счету 60 и отбор по контрагенту, делается 3 сек за любой месяц
p.s. База 20 гиг на PostgreSQL |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |