MS SQL 2008: Перестают работать сложные запросы к View
От: SteeLHeaD  
Дата: 29.03.10 09:52
Оценка:
В моей организации используется самописная мини-CMS (контрагенты, контакты, заявки, договора и т.п более-менее типичные бизнес — объекты). Все это работет как двузвенка (Visual Basic — клиент и база данных на SQL Server 2008 — таблицы, View, хранимые процедуры)
У меня в базе есть некий набор таблиц и представлений. Таблицы все не очень сложные, и не очень большие — не более 100 000 записей. View (или "представления" в одном из русских переводов) чуть сложнее, но тоже ничего особенного. В основном View используются для связывания таблиц и генерирования удобного для простомотра наора записей (где, например, ID заменены на значения из таблицы — справочника)
в частности, есть таблица "Заявка" и View "ЗаявкиВид"

И просиходит у меня такая фигня: раз в несколько дней мне начинают звонить пользователи, и жаловаться, что у них не работает "поиск по "заявкам". Лезу в MS SQL server management studio и вижу, что

0) проблема возникает при выполнении клиентского запроса вида "select * from dbo.[ЗаявкиВид] where КодЗаявки > 0 and НомерДокумента like '%9763%'". Вообще, такие запросы при работе используются чаще всего. То есть запрос такого вида — один из самых часто используемых (именно к этому View).

1) любые, какие могу придумать, запросы ко всем таблицам — выполняются мгновенно.

2) "конкретные" запросы к ЗаявкиВид вида "select * from dbo.[ЗаявкиВид] where КодЗаявки=79369" выполняются мгновенно.

3) более слоджные запросы вида "select top 10 * from dbo.[ЗаявкиВид]" или "select * from dbo.[ЗаявкиВид] where КодЗаявки>79369" — не выполняются вообще, то есть выполняются безрезультатно и бесконечно долго.
Даже когда я грохаю и создаю заново этот View (правда, не внося в него никаких изменнеий) — работоспособность не восстанавливается.

Помогает только перезагрузка SQL сервера — другого способа борьбы я пока не нашел.

Подскажите, пожалуйста, возможные причины и способы диагностики.
(При необходимости могу привести полную страктуру таблиц и View, пока просто не вижу смысла)
Re: MS SQL 2008: Перестают работать сложные запросы к View
От: capgreen  
Дата: 29.03.10 10:00
Оценка:
Скорее всего проблема в блокировках данных.
Стоит посмотреть какие блокировки и на сколько захватываются процессами, обращающимися к Вашей базе.
Re: MS SQL 2008: Перестают работать сложные запросы к View
От: MasterZiv СССР  
Дата: 29.03.10 14:57
Оценка:
SteeLHeaD wrote:

> 0) проблема возникает при выполнении клиентского запроса вида "select *

> from dbo.[ЗаявкиВид] where КодЗаявки > 0 and НомерДокумента like
> '%9763%'".

Так какая проблема-то возникает ?

> Даже когда я грохаю и создаю заново этот View (правда, не внося в него

> никаких изменнеий) — работоспособность не восстанавливается.

Не удивительно, потому что дело не во view.

> Помогает только перезагрузка SQL сервера — другого способа борьбы я пока

> не нашел.

Странно, что это помогает.
Posted via RSDN NNTP Server 2.1 beta
Re: MS SQL 2008: Перестают работать сложные запросы к View
От: MasterZiv СССР  
Дата: 29.03.10 15:03
Оценка:
SteeLHeaD wrote:

> 0) проблема возникает при выполнении клиентского запроса вида



select *
from dbo.[ЗаявкиВид]
where КодЗаявки > 0
and НомерДокумента like '%9763%'"


Вообще, такие запросы при работе используются чаще всего.

Это плохо. Запрос без SARG-ов, почти не оптимизируемый.
Будет читать всю таблицу, если конечно у тебя с
КодЗаявки > 0 не только одна запись в таблице.

Наверное, гадать, почему MSSQL не выполняет быстро этот запрос
неинтересно, интересно сделать так, чтобы выполнялся он быстро.

Так что давай определение конкретно запрос и определение
всех таблиц из него, View тоже.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: SteeLHeaD  
Дата: 30.03.10 06:39
Оценка:
Здравствуйте, capgreen, Вы писали:

C>Скорее всего проблема в блокировках данных.

C>Стоит посмотреть какие блокировки и на сколько захватываются процессами, обращающимися к Вашей базе.

В MS SQL 2000 сделатьт это можно было просто из Enterprise Manager'а.
А каим инструментом нужно воспользоваться в SQL 2008 чтобы
1) посмотреть блокировки
2) посмотреть последовательность запросов к серверу, как варинат — записать в лог?

Спасибо за советы заранее, попробую разобраться с этой проблемой
Re[2]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: SteeLHeaD  
Дата: 30.03.10 06:50
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>SteeLHeaD wrote:


>> 0) проблема возникает при выполнении клиентского запроса вида



MZ>select *

MZ>from dbo.[ЗаявкиВид]
MZ>where КодЗаявки > 0
MZ> and НомерДокумента like '%9763%'"


MZ>Вообще, такие запросы при работе используются чаще всего.


MZ>Это плохо. Запрос без SARG-ов, почти не оптимизируемый.

MZ>Будет читать всю таблицу, если конечно у тебя с
MZ>КодЗаявки > 0 не только одна запись в таблице.

MZ>Наверное, гадать, почему MSSQL не выполняет быстро этот запрос

MZ>неинтересно, интересно сделать так, чтобы выполнялся он быстро.

MZ>Так что давай определение конкретно запрос и определение

MZ>всех таблиц из него, View тоже.

Моя проблема не в том, что это запрос работает медленно.
Меня такая работа устраивает — таблица невелика, а время работы я все ранво не могу заметить неворуженным глазом — оно меньше сотой доли серкунды.
Моя проблема в том, что начиная с какого то момента этот запрос перестает работать вообще.
То есть запросы вида "select * from dbo.[ЗаявкиВид] where КодЗаявки=79369" выполняются,
а запросы вида "select top 10 * from dbo.[ЗаявкиВид]" или "select * from dbo.[ЗаявкиВид] where КодЗаявки>79369" — зависают.
Впечатление, что у SQL исчерпывается некий ресурс, но я себе таклого даже в страшном сне не могу представить — чтобы это происходило молча, без каких либо диангностических сообщений.

И мне интересно почему это просиходит и как именно это устранить.

Конечно, я привожу CREATE'ы для всех основных таблиц и View, если чего то не хватает — поправьте.


В любом случае, спасибо большое за помощь и советы.


USE [Dogovora_New]
GO

/****** Object:  View [dbo].[ДоговораВид]    Script Date: 03/30/2010 10:49:29 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO





CREATE VIEW [dbo].[ДоговораВид]
AS
SELECT     TOP 100 PERCENT dbo.Договор.КодДоговора, dbo.Договор.КодТипДоговора, dbo.ТипДоговора.ТипДоговора, dbo.Договор.НомерДоговора, 
                      dbo.Договор.КодКонтрагента, dbo.Контрагент.НаименованиеКраткое AS Контрагент, dbo.Контрагент.ТелефонКонтрагента, 
                      dbo.Договор.КодКонтакта, dbo.Контакт.Фамилия + N' ' + dbo.Контакт.Имя + N' ' + dbo.Контакт.Отчество AS Контакт, 
                      dbo.Контакт.Телефон AS ТелефонКонтакта, dbo.Договор.ДатаНачала, dbo.Договор.ДатаКонца, dbo.Договор.КодОрганизации, 
                      dbo.Организация.НаименованиеОрганизации AS Организация, dbo.Договор.КодМенеджера, 
                      dbo.Сотрудник.Фамилия + ' ' + dbo.Сотрудник.Имя + ' ' + dbo.Сотрудник.Отчество AS Менеджер, dbo.Договор.КодВалюты, dbo.Валюта.Валюта, 
                      dbo.Договор.Сумма, dbo.Договор.Курс, dbo.Договор.СуммаВалюта, dbo.Договор.КодСостояния, dbo.Состояние.Состояние, 
                      dbo.Договор.НомерСчета, dbo.Договор.ФизНалДог, dbo.Договор.ФизНалАкт, dbo.Договор.ФизНалКопииДог, dbo.Договор.ФизНалКопииАкта, dbo.Договор.ДатаАкта, dbo.Договор.ФизНалПакетаДок, dbo.Договор.Примечания, dbo.Сотрудник.КодГруппыПользователей, 
                      dbo.ГруппаПользователей.Наименование AS ГруппаПользователей, dbo.Сотрудник.КодПодразделения, dbo.Подразделение.Подразделение, 
                      dbo.Контрагент.Адрес AS АдресКонтрагента, dbo.Контрагент.Индекс AS ИндексКонтрагента, dbo.Контрагент.ИНН AS ИННКонтрагента
        , dbo.Договор.КодСтатуса, dbo.СтатусДоговора.Наименование AS Статус, dbo.Договор.КодФилиала, dbo.Филиал.Наименование AS Филиал, dbo.Договор.КодСтатусаРазнесения, dbo.СтатусРазнесения.СтатусРазнесения, dbo.Договор.НеразносимаяСумма
,                      CASE
                          (SELECT     COUNT(Z.КодЗаявки)
                            FROM          dbo.Заявка Z
                            WHERE      Z.КодДоговора = dbo.Договор.КодДоговора) WHEN 0 THEN 'нет заявок' ELSE '    есть заявки' END AS НаличиеЗаявок, 
        dbo.Договор.КодОтдела, dbo.Отдел.Отдел, dbo.Договор.КодОтделаКомпаньона, ОтделКомпаньон.Отдел AS ОтделКомпаньон,
        dbo.Договор.КодВариантаСотрудничества, dbo.ВариантСотрудничества.Наименование AS ВариантСотрудничества, dbo.Договор.ПроцентСотрудничества,
        dbo.Договор.НомерКарточки, dbo.Договор.ВсеЗаявкиЗакрыты, dbo.Договор.ДоговорЗакрытКО, dbo.ТипЗакрытия.ТипЗакрытия as [Закрыт КО]
    
FROM         dbo.Контакт INNER JOIN
                      dbo.Сотрудник INNER JOIN
                      dbo.Договор INNER JOIN
                      dbo.ТипДоговора ON dbo.Договор.КодТипДоговора = dbo.ТипДоговора.КодТипДоговора ON 
                      dbo.Сотрудник.КодСотрудника = dbo.Договор.КодМенеджера INNER JOIN
                      dbo.Валюта ON dbo.Договор.КодВалюты = dbo.Валюта.КодВалюты INNER JOIN
                      dbo.Состояние ON dbo.Договор.КодСостояния = dbo.Состояние.КодСостояния INNER JOIN
                      dbo.Организация ON dbo.Договор.КодОрганизации = dbo.Организация.КодОрганизации INNER JOIN
                      dbo.Контрагент ON dbo.Договор.КодКонтрагента = dbo.Контрагент.КодКонтрагента ON 
                      dbo.Контакт.КодКонтакта = dbo.Договор.КодКонтакта INNER JOIN
                      dbo.ГруппаПользователей ON dbo.Сотрудник.КодГруппыПользователей = dbo.ГруппаПользователей.КодГруппыПользователей INNER JOIN
                      dbo.Подразделение ON dbo.Сотрудник.КодПодразделения = dbo.Подразделение.КодПодразделения INNER JOIN
        dbo.СтатусДоговора ON dbo.Договор.КодСтатуса = dbo.СтатусДоговора.КодСтатуса INNER JOIN
        dbo.Филиал ON dbo.Договор.КодФилиала = dbo.Филиал.КодФилиала INNER JOIN dbo.Отдел ON dbo.Договор.КодОтдела = dbo.Отдел.КодОтдела INNER JOIN
        dbo.Отдел ОтделКомпаньон ON dbo.Договор.КодОтделаКомпаньона = ОтделКомпаньон.КодОтдела INNER JOIN
        dbo.ВариантСотрудничества ON dbo.Договор.КодВариантаСотрудничества = dbo.ВариантСотрудничества.КодВариантаСотрудничества INNER JOIN
        dbo.СтатусРазнесения ON dbo.Договор.КодСтатусаРазнесения = dbo.СтатусРазнесения.КодСтатусаРазнесения INNER JOIN
        dbo.ТипЗакрытия ON dbo.Договор.ДоговорЗакрытКО = dbo.ТипЗакрытия.КодТипаЗакрытия
ORDER BY dbo.Договор.ДатаНачала DESC






GO




USE [Dogovora_New]
GO

/****** Object:  Table [dbo].[Договор]    Script Date: 03/30/2010 10:50:18 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Договор](
    [КодДоговора] [dbo].[pointer] IDENTITY(1,1) NOT NULL,
    [КодТипДоговора] [dbo].[pointer] NOT NULL,
    [КодСостояния] [dbo].[pointer] NOT NULL,
    [НомерДоговора] [varchar](10) NOT NULL,
    [ДатаНачала] [datetime] NOT NULL,
    [ДатаКонца] [datetime] NULL,
    [КодКонтрагента] [dbo].[pointer] NOT NULL,
    [КодКонтакта] [dbo].[pointer] NOT NULL,
    [КодОрганизации] [dbo].[pointer] NOT NULL,
    [КодМенеджера] [dbo].[pointer] NOT NULL,
    [НомерСчета] [varchar](10) NOT NULL,
    [Сумма] [money] NOT NULL,
    [КодВалюты] [dbo].[pointer] NOT NULL,
    [Курс] [money] NOT NULL,
    [СуммаВалюта] [money] NOT NULL,
    [ФизНалДог] [int] NOT NULL,
    [Примечания] [varchar](255) NOT NULL,
    [КодФилиала] [dbo].[pointer] NOT NULL,
    [КтоСоздал] [varchar](20) NOT NULL,
    [КогдаСоздал] [datetime] NOT NULL,
    [КтоИзменил] [varchar](20) NOT NULL,
    [КогдаИзменил] [datetime] NULL,
    [КтоЗакрыл] [varchar](20) NOT NULL,
    [КогдаЗакрыл] [datetime] NULL,
    [КодСтатуса] [int] NOT NULL,
    [КодОтдела] [dbo].[pointer] NOT NULL,
    [КодОтделаКомпаньона] [dbo].[pointer] NOT NULL,
    [НомерКарточки] [varchar](250) NOT NULL,
    [КодВариантаСотрудничества] [dbo].[pointer] NOT NULL,
    [ПроцентСотрудничества] [int] NOT NULL,
    [ФизНалАкт] [int] NOT NULL,
    [ФизНалПакетаДок] [int] NOT NULL,
    [ФизНалКопииДог] [int] NOT NULL,
    [ФизНалКопииАкта] [int] NOT NULL,
    [ДатаАкта] [datetime] NOT NULL,
    [КодСтатусаРазнесения] [dbo].[pointer] NOT NULL,
    [НеразносимаяСумма] [money] NOT NULL,
    [ВсеЗаявкиЗакрыты] [int] NOT NULL,
    [ДоговорЗакрытКО] [int] NOT NULL,
    [ДоговорЗакрытКОДата] [datetime] NULL,
    [IDСобытия] [int] NULL,
    [КлиентНовыйСтарый] [dbo].[pointer] NULL,
 CONSTRAINT [PK_Договор] PRIMARY KEY CLUSTERED 
(
    [КодДоговора] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY],
 CONSTRAINT [UQ_Договор_НомерДоговора] UNIQUE NONCLUSTERED 
(
    [НомерДоговора] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'1 - есть договор, 0 - нет договора' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Договор', @level2type=N'COLUMN',@level2name=N'ФизНалДог'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'1 - есть акт, 0 - нет акта' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Договор', @level2type=N'COLUMN',@level2name=N'ФизНалАкт'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'1 - есть пакет документов, 0 - нет пакета документов' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Договор', @level2type=N'COLUMN',@level2name=N'ФизНалПакетаДок'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'1 - есть копия акта, 0 - нет копии акта' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Договор', @level2type=N'COLUMN',@level2name=N'ФизНалКопииДог'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'1 - есть копия акта, 0 - нет копии акта' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Договор', @level2type=N'COLUMN',@level2name=N'ФизНалКопииАкта'
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_Договор_КодВалюты] FOREIGN KEY([КодВалюты])
REFERENCES [dbo].[Валюта] ([КодВалюты])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_Договор_КодВалюты]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_Договор_КодКонтрагента] FOREIGN KEY([КодКонтрагента])
REFERENCES [dbo].[Контрагент] ([КодКонтрагента])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_Договор_КодКонтрагента]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_Договор_КодМенеджера] FOREIGN KEY([КодМенеджера])
REFERENCES [dbo].[Сотрудник] ([КодСотрудника])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_Договор_КодМенеджера]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_Договор_КодТипДоговора] FOREIGN KEY([КодТипДоговора])
REFERENCES [dbo].[ТипДоговора] ([КодТипДоговора])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_Договор_КодТипДоговора]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_Договор_Контакт] FOREIGN KEY([КодКонтакта])
REFERENCES [dbo].[Контакт] ([КодКонтакта])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_Договор_Контакт]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_Договор_Организация] FOREIGN KEY([КодОрганизации])
REFERENCES [dbo].[Организация] ([КодОрганизации])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_Договор_Организация]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_Договор_Состояние] FOREIGN KEY([КодСостояния])
REFERENCES [dbo].[Состояние] ([КодСостояния])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_Договор_Состояние]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_Договор_СтатусДоговора] FOREIGN KEY([КодСтатуса])
REFERENCES [dbo].[СтатусДоговора] ([КодСтатуса])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_Договор_СтатусДоговора]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_Договор_Филиал] FOREIGN KEY([КодФилиала])
REFERENCES [dbo].[Филиал] ([КодФилиала])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_Договор_Филиал]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_КодВариантаСотрудничества_Договор] FOREIGN KEY([КодВариантаСотрудничества])
REFERENCES [dbo].[ВариантСотрудничества] ([КодВариантаСотрудничества])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_КодВариантаСотрудничества_Договор]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_КодОтдела_Договор] FOREIGN KEY([КодОтдела])
REFERENCES [dbo].[Отдел] ([КодОтдела])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_КодОтдела_Договор]
GO

ALTER TABLE [dbo].[Договор]  WITH NOCHECK ADD  CONSTRAINT [FK_КодОтделаКомпаньона_Договор] FOREIGN KEY([КодОтделаКомпаньона])
REFERENCES [dbo].[Отдел] ([КодОтдела])
GO

ALTER TABLE [dbo].[Договор] CHECK CONSTRAINT [FK_КодОтделаКомпаньона_Договор]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_НомерДоговора]  DEFAULT ('') FOR [НомерДоговора]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_КодКонтакта]  DEFAULT (1) FOR [КодКонтакта]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_НомерСчета]  DEFAULT ('нет') FOR [НомерСчета]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_Сумма]  DEFAULT (0) FOR [Сумма]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_Курс]  DEFAULT (1) FOR [Курс]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_СуммаВалюта]  DEFAULT (0) FOR [СуммаВалюта]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_ФизНалДог]  DEFAULT (0) FOR [ФизНалДог]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_Примечания]  DEFAULT ('') FOR [Примечания]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF__Договор__КодФили__5C979F60]  DEFAULT (1) FOR [КодФилиала]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_КтоСоздал]  DEFAULT ('') FOR [КтоСоздал]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_КогдаСоздал]  DEFAULT (getdate()) FOR [КогдаСоздал]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_КтоИзменил]  DEFAULT ('') FOR [КтоИзменил]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_КтоЗакрыл]  DEFAULT ('') FOR [КтоЗакрыл]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF__Договор__КодСтат__55EAA1D1]  DEFAULT (1) FOR [КодСтатуса]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF__Договор__КодОтде__23D42350]  DEFAULT (1) FOR [КодОтдела]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF__Договор__КодОтде__24C84789]  DEFAULT (1) FOR [КодОтделаКомпаньона]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF__Договор__НомерКа__25BC6BC2]  DEFAULT ('') FOR [НомерКарточки]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF__Договор__КодВари__26B08FFB]  DEFAULT (1) FOR [КодВариантаСотрудничества]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF__Договор__Процент__27A4B434]  DEFAULT (0) FOR [ПроцентСотрудничества]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_ФизНалАкт]  DEFAULT (0) FOR [ФизНалАкт]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_ФизНалПакетаДок]  DEFAULT (0) FOR [ФизНалПакетаДок]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_ФизНалКопииДог]  DEFAULT (0) FOR [ФизНалКопииДог]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_ФизНалКопииАкта]  DEFAULT (0) FOR [ФизНалКопииАкта]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_ДатаАкта]  DEFAULT ('01.01.1900') FOR [ДатаАкта]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_КодСтатусаРазнесения]  DEFAULT (0) FOR [КодСтатусаРазнесения]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_НеразносимаяСумма]  DEFAULT (0) FOR [НеразносимаяСумма]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_ВсеЗаявкиЗакрыты]  DEFAULT ((0)) FOR [ВсеЗаявкиЗакрыты]
GO

ALTER TABLE [dbo].[Договор] ADD  CONSTRAINT [DF_Договор_ДоговорЗакрытКО]  DEFAULT ((0)) FOR [ДоговорЗакрытКО]
GO


Остпальные таблицы — это справочники вида

USE [Dogovora_New]
GO

/****** Object:  Table [dbo].[ТипДоговора]    Script Date: 03/30/2010 10:51:07 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[ТипДоговора](
    [КодТипДоговора] [dbo].[pointer] NOT NULL,
    [ТипДоговора] [varchar](255) NOT NULL,
    [Примечания] [varchar](255) NOT NULL,
 CONSTRAINT [PK_ТипДоговора] PRIMARY KEY CLUSTERED 
(
    [КодТипДоговора] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY],
 CONSTRAINT [UQ_ТипДоговора_ТипДоговора] UNIQUE NONCLUSTERED 
(
    [ТипДоговора] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

— то есть, абсолютно нреинтересны.
Если что тто из них нужно — готов сразу же написать.
Re[3]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: Ziaw Россия  
Дата: 30.03.10 08:00
Оценка:
Здравствуйте, SteeLHeaD, Вы писали:

SLH>Моя проблема в том, что начиная с какого то момента этот запрос перестает работать вообще.

SLH>То есть запросы вида "select * from dbo.[ЗаявкиВид] where КодЗаявки=79369" выполняются,
SLH>а запросы вида "select top 10 * from dbo.[ЗаявкиВид]" или "select * from dbo.[ЗаявкиВид] where КодЗаявки>79369" — зависают.
SLH>Впечатление, что у SQL исчерпывается некий ресурс, но я себе таклого даже в страшном сне не могу представить — чтобы это происходило молча, без каких либо диангностических сообщений.

Похоже на лок части индекса. Думаю кто-то из клиентов держит открытую транзкцию с залоченной записью.
Re[4]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: Ziaw Россия  
Дата: 30.03.10 08:03
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Похоже на лок части индекса. Думаю кто-то из клиентов держит открытую транзкцию с залоченной записью.


Предвидя следующий вопрос:
Посмотреть можно в ентерпрайз менеджере (в экспресс версии тоже) с помощью отчета по базе о транзакциях.
Re[3]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: MasterZiv СССР  
Дата: 30.03.10 08:42
Оценка:
SteeLHeaD wrote:

> То есть запросы вида "select * from dbo.[ЗаявкиВид] where

> КодЗаявки=79369" выполняются,
> а запросы вида "select top 10 * from dbo.[ЗаявкиВид]" или "select * from
> dbo.[ЗаявкиВид] where КодЗаявки>79369" — зависают.

Скорее всего, запросы просто очень-очень медленно работают.
Ты погляди на них планы, и статусы при выполнении.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: MasterZiv СССР  
Дата: 30.03.10 08:52
Оценка: +1
SteeLHeaD wrote:

Так, сразу. Убирай TOP 100, ORDER BY, из вьюхи.
Они должны быть только в конечных запросах.

типа того должно быть :

> CREATE VIEW [dbo].[ДоговораВид]

> AS
> SELECT dbo.Договор.КодДоговора, ...
> , CASE
> (SELECT COUNT(Z.КодЗаявки)
> FROM dbo.Заявка Z
> WHERE Z.КодДоговора = dbo.Договор.КодДоговора) WHEN 0 THEN 'нет заявок' ELSE ' есть заявки' END AS НаличиеЗаявок,


...


> FROM dbo.Контакт INNER JOIN

> dbo.Сотрудник INNER JOIN
> dbo.Договор INNER JOIN
> dbo.ТипДоговора ON dbo.Договор.КодТипДоговора = dbo.ТипДоговора.КодТипДоговора ON
> dbo.Сотрудник.КодСотрудника = dbo.Договор.КодМенеджера INNER JOIN
> dbo.Валюта ON dbo.Договор.КодВалюты = dbo.Валюта.КодВалюты INNER JOIN
> dbo.Состояние ON dbo.Договор.КодСостояния = dbo.Состояние.КодСостояния INNER JOIN
> dbo.Организация ON dbo.Договор.КодОрганизации = dbo.Организация.КодОрганизации INNER JOIN
> dbo.Контрагент ON dbo.Договор.КодКонтрагента = dbo.Контрагент.КодКонтрагента ON
> dbo.Контакт.КодКонтакта = dbo.Договор.КодКонтакта INNER JOIN
> dbo.ГруппаПользователей ON dbo.Сотрудник.КодГруппыПользователей = dbo.ГруппаПользователей.КодГруппыПользователей INNER JOIN
> dbo.Подразделение ON dbo.Сотрудник.КодПодразделения = dbo.Подразделение.КодПодразделения INNER JOIN
> dbo.СтатусДоговора ON dbo.Договор.КодСтатуса = dbo.СтатусДоговора.КодСтатуса INNER JOIN
> dbo.Филиал ON dbo.Договор.КодФилиала = dbo.Филиал.КодФилиала INNER JOIN dbo.Отдел ON dbo.Договор.КодОтдела = dbo.Отдел.КодОтдела INNER JOIN
> dbo.Отдел ОтделКомпаньон ON dbo.Договор.КодОтделаКомпаньона = ОтделКомпаньон.КодОтдела INNER JOIN
> dbo.ВариантСотрудничества ON dbo.Договор.КодВариантаСотрудничества = dbo.ВариантСотрудничества.КодВариантаСотрудничества INNER JOIN
> dbo.СтатусРазнесения ON dbo.Договор.КодСтатусаРазнесения = dbo.СтатусРазнесения.КодСтатусаРазнесения INNER JOIN
> dbo.ТипЗакрытия ON dbo.Договор.ДоговорЗакрытКО = dbo.ТипЗакрытия.КодТипаЗакрытия


Далее.
Где условия JOIN-ов ? Пушкин их за тебя писать будет ?

FROM dbo.Контакт INNER

JOIN dbo.Сотрудник ??? ГДЕ ??? Может быть должно быть ON
dbo.Сотрудник.КодСотрудника = dbo.Договор.КодМенеджера

INNER JOIN dbo.Договор ??? ГДЕ ??? Может должно быть ON dbo.Контакт.КодКонтакта
= dbo.Договор.КодКонтакта ?
INNER JOIN dbo.ТипДоговора ON dbo.Договор.КодТипДоговора =
dbo.ТипДоговора.КодТипДоговора


INNER JOIN dbo.Валюта ON dbo.Договор.КодВалюты = dbo.Валюта.КодВалюты

INNER JOIN dbo.Состояние ON dbo.Договор.КодСостояния = dbo.Состояние.КодСостояния

INNER JOIN dbo.Организация ON dbo.Договор.КодОрганизации =
dbo.Организация.КодОрганизации

INNER JOIN dbo.Контрагент ON dbo.Договор.КодКонтрагента =
dbo.Контрагент.КодКонтрагента



INNER JOIN dbo.ГруппаПользователей ON dbo.Сотрудник.КодГруппыПользователей =
dbo.ГруппаПользователей.КодГруппыПользователей

INNER JOIN dbo.Подразделение ON dbo.Сотрудник.КодПодразделения =
dbo.Подразделение.КодПодразделения

INNER JOIN dbo.СтатусДоговора ON dbo.Договор.КодСтатуса =
dbo.СтатусДоговора.КодСтатуса

INNER JOIN
dbo.Филиал ON dbo.Договор.КодФилиала = dbo.Филиал.КодФилиала

INNER JOIN dbo.Отдел ON dbo.Договор.КодОтдела = dbo.Отдел.КодОтдела

INNER JOIN
dbo.Отдел ОтделКомпаньон ON dbo.Договор.КодОтделаКомпаньона =
ОтделКомпаньон.КодОтдела

INNER JOIN
dbo.ВариантСотрудничества ON dbo.Договор.КодВариантаСотрудничества =
dbo.ВариантСотрудничества.КодВариантаСотрудничества

INNER JOIN
dbo.СтатусРазнесения ON dbo.Договор.КодСтатусаРазнесения =
dbo.СтатусРазнесения.КодСтатусаРазнесения

INNER JOIN
dbo.ТипЗакрытия ON dbo.Договор.ДоговорЗакрытКО =
dbo.ТипЗакрытия.КодТипаЗакрытия
Posted via RSDN NNTP Server 2.1 beta
Re[3]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: MasterZiv СССР  
Дата: 30.03.10 08:55
Оценка:
SteeLHeaD wrote:

> — то есть, абсолютно нреинтересны.

> Если что тто из них нужно — готов сразу же написать.

На будущее. Надо писать CREATE TABLE таблиц, все индексы и PK и UNIQUE
констрейнты, CREATE VIEW .

Вся эта лабуда типа дефолтов и форен кийёв не нужна для анализа производительности.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: SteeLHeaD  
Дата: 02.04.10 07:22
Оценка:
Здравствуйте, MasterZiv, спасибо за советы по созданию эффективных View!
Re[5]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: SteeLHeaD  
Дата: 02.04.10 07:24
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, Ziaw, Вы писали:


Z>>Похоже на лок части индекса. Думаю кто-то из клиентов держит открытую транзкцию с залоченной записью.


Z>Предвидя следующий вопрос:

Z>Посмотреть можно в ентерпрайз менеджере (в экспресс версии тоже) с помощью отчета по базе о транзакциях.

Ну нет в sql 2008 Enterprise Manager.
И в Sql Server Management Studio в Management нет Current Activity
Было бы — я бы сам посмотрел.

я не знаю, где найти этот отчет о транзакциях. Потому и спрашиваю название инструмента, которым это смотрят
Re[6]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: SteeLHeaD  
Дата: 02.04.10 08:06
Оценка:
Здравствуйте, SteeLHeaD, Вы писали:

SLH>Здравствуйте, Ziaw, Вы писали:


Z>>Здравствуйте, Ziaw, Вы писали:


Z>>>Похоже на лок части индекса. Думаю кто-то из клиентов держит открытую транзкцию с залоченной записью.


Z>>Предвидя следующий вопрос:

Z>>Посмотреть можно в ентерпрайз менеджере (в экспресс версии тоже) с помощью отчета по базе о транзакциях.

SLH>Ну нет в sql 2008 Enterprise Manager.

SLH>И в Sql Server Management Studio в Management нет Current Activity
SLH>Было бы — я бы сам посмотрел.

SLH>я не знаю, где найти этот отчет о транзакциях. Потому и спрашиваю название инструмента, которым это смотрят


я нашел в Microsoft SQL Server Management Strudio то, что называется Activity Monitor.
Но какой там отчет смотреть — не знаю.
Re[7]: MS SQL 2008: Перестают работать сложные запросы к Vie
От: Ziaw Россия  
Дата: 05.04.10 06:40
Оценка:
Здравствуйте, SteeLHeaD, Вы писали:

SLH>я нашел в Microsoft SQL Server Management Strudio то, что называется Activity Monitor.

SLH>Но какой там отчет смотреть — не знаю.


 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.