Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 быстродействие вьюшки  [new]
italiy555
Member

Откуда:
Сообщений: 36
Добрый день,медленно работает связка двух таблиц, подскажите может можно что то сделать для быстродействия.
Исторически такая структура. Что то у них там с копейками не билось, сделали так.
одна табл. строк счета с товарами:
sch_new(
	[id] [int] IDENTITY(1,1) NOT NULL-ключ,
	[nomer] [int] NOT NULL,
	[mes] [int] NULL,
	[god] [int] NULL,
	[kod_predpr] [int] NULL,.. куча других полей).

вторая табл.
строк приходов по счетам(могут быть строки не по этим счетам).
             pl_poruch(
             [id] [int] IDENTITY(1,1) NOT NULL-ключ,
	[nomer] [int] NULL,
	[mes] [int] NULL,
	[god] [int] NULL,
	[kod_predpr] [int] NULL,.. куча других  полей)

в таблицах есть индекс кластерный id, и не кластерный по четырём полям.

в итоге часто используется сложная вьюшка:
состоящая из нескольких, чтобы была одна строка по каждому счету:

view_sch_new (SELECT nomer, mes, god, kod_predpr, CAST(SUM(summa) AS NUMERIC(20, 3)) AS сумма ... FROM  sch_new
GROUP BY nomer, mes, god, kod_predpr


view_pl_poruch (SELECT nomer, mes, god, kod_predpr, CAST(SUM(summa_prix) AS NUMERIC(20, 3)) AS сумма_прих ... FROM  pl_poruch GROUP BY nomer, mes, god, kod_predpr


view_sum (SELECT     s.nomer, s.god, s.mes, s.kod_predpr, s.сумма,  (CASE WHEN p.сумма_прих ) IS NULL THEN 0 ELSE CASE WHEN p.сумма_прих END  AS сумма_оплаты FROM         view_sch_new s LEFT OUTER JOIN
view_pl_poruch p ON s.nomer = p.nomer_sch AND s.god = p.god AND  s.mes = p.mes AND s.kod_predpr = p.kod_predpr 


во вьюшках индексы не делали, т.е не связь один ко многим.

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

Может быть есть какие то возможности увеличить быстродействие в этой ситуации?
заранее благодарна

Сообщение было отредактировано: 2 апр 13, 11:54
2 апр 13, 11:53    [14125561]     Ответить | Цитировать Сообщить модератору
 Re: быстродействие вьюшки  [new]
Glory
Member

Откуда:
Сообщений: 104751
italiy555
Может быть есть какие то возможности увеличить быстродействие в этой ситуации?

Для этого начинаютс с анализа плана выполнения
По названиям полей, которые выдает представление, запрос оптимизировать невозможно

Кроме того в случае "видно, что блокировки по этой связке" оптимизируются оба блокирующих запроса, а не один
2 апр 13, 12:00    [14125610]     Ответить | Цитировать Сообщить модератору
 Re: быстродействие вьюшки  [new]
italiy555
Member

Откуда:
Сообщений: 36
Glory,
Для этого начинаютс с анализа плана выполнения --это что имеется ввиду?

Кроме того в случае "видно, что блокировки по этой связке" оптимизируются оба блокирующих запроса, а не один--это понятно, просто я предположила, что возможно есть какие то способы через ключи или индексы.
2 апр 13, 12:20    [14125760]     Ответить | Цитировать Сообщить модератору
 Re: быстродействие вьюшки  [new]
Glory
Member

Откуда:
Сообщений: 104751
italiy555
Для этого начинаютс с анализа плана выполнения --это что имеется ввиду?

Под планом выполнения имеется ввиду план выполнения(execution plan)

italiy555
просто я предположила, что возможно есть какие то способы через ключи или индексы.

Ага, пойди туда, не знаю куда. Оптимизируй то, не знаю что.

Вас что не устраивает то
- просто время выполнения запроса
- или конкурирующие блокировки ?
2 апр 13, 13:05    [14126092]     Ответить | Цитировать Сообщить модератору
 Re: быстродействие вьюшки  [new]
italiy555
Member

Откуда:
Сообщений: 36
Glory,
Вас что не устраивает то
- просто время выполнения запроса
- или конкурирующие блокировки ?
--
Я думала, это связано между собой,
сами вьюшки работаю нормально, до тех пор пока не начинают ими пользоваться несколько человек(например в конце месяца считают все усиленно зп), появляются блокировки на сервере(в блокировках селекты на эти таблицы ), время выполнения вьюшек увеличивается, клиент приложения начинают висеть . Я не пойму , что ещё описать.
2 апр 13, 13:40    [14126329]     Ответить | Цитировать Сообщить модератору
 Re: быстродействие вьюшки  [new]
Glory
Member

Откуда:
Сообщений: 104751
italiy555
до тех пор пока не начинают ими пользоваться несколько человек(например в конце месяца считают все усиленно зп), появляются блокировки на сервере(в блокировках селекты на эти таблицы ),

Запросы на чтение не могут блокировать друг друга

italiy555
Я не пойму , что ещё описать.

Факты, а не размышления
Например, список блокировок. А не безинформативное "появляются блокировки на сервере(в блокировках селекты на эти таблицы "
2 апр 13, 13:45    [14126368]     Ответить | Цитировать Сообщить модератору
 Re: быстродействие вьюшки  [new]
Mind
Member

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

VIEW не выполняется. Это просто кусок запроса, который подставляется в ваш основной запрос.
Оптимизировать VIEW невозможно. Нужно смотреть на запросы которые обращаются к этому VIEW. Вот с запросами уже можно что-то сделать, но конечно нужно смотреть планы.
2 апр 13, 22:00    [14128517]     Ответить | Цитировать Сообщить модератору
 Re: быстродействие вьюшки  [new]
Exproment
Member

Откуда:
Сообщений: 416
italiy555, если вам не устраивает производительность, то выполните SET SHOWPLAN_XML ON,
найдите "медленный" на ваш взгляд запрос и выполните его. В итоге получите execute plan в виде xml. Его и надо выложить сюда.
2 апр 13, 23:53    [14128771]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить