Переключение на Главную Страницу Страницы: 1 2 [3] 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите новичку.. Проблема с запросом. (число прочтений - 19199 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #30 - 03. Декабря 2008 :: 12:59
Печать  
Neo писал(а) 03. Декабря 2008 :: 12:51:
Цитата:
начни проводить документ когда на экране появиться ждите
запусти с другого экрана или из qa
select top 100  * from _1sjourn  
c и без  (nolock) и увидишь разницу сам


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

Но блокирует ведь не сам запрос select, а 1С.

Оператор select ведь никаких блокировок вроде не накладывает  Нерешительный

неправильно 1с является инициатором блокировки,
а блокирует доступ ко всей таблице _1sjourn sql сервер.

PS и заметь еще ведь при проведении документ может и не изменяться т.е не будет update ни _1sjourn ни dh... таблиц документа а блокировка есть.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #31 - 03. Декабря 2008 :: 14:38
Печать  
Цитата:
> блокирует доступ ко всей таблице _1sjourn sql сервер.


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

Но по-моему, это можно сделать и без nolock, разве нет?

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #32 - 03. Декабря 2008 :: 14:50
Печать  
Neo писал(а) 03. Декабря 2008 :: 14:38:
Цитата:
> блокирует доступ ко всей таблице _1sjourn sql сервер.


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

Но по-моему, это можно сделать и без nolock, разве нет?


какой запрос вы подрузамеваете.
Если речь об 1с запросе
Запрос_1 = СоздатьОбъект("Запрос"); то все стандартные
1с запросы (Запрос_1) идут с хинтом (nolock)

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

и еще Цитата:
Если оператор select блокирует таблицу

как раз наоборот менеджер блокировок ( часть sql сервера )
блокирует таблицу и если есть select без ( nolock ) то select останавливается ждет пока не будет снята блокировка менеджером блокировок,а если у нас есть select c (nolock)
то такому select менеджер блокировок разрешит выполняться дальше и мы получим "грязные" данные. Потому что предполагается что блокировали данные все таки разумные люди (разумные программы) и их не зря ставили.

блокировка select происходит чуть хитрее но я думаю что итак Вас запутал.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #33 - 03. Декабря 2008 :: 15:00
Печать  
Цитата:
какой запрос вы подрузамеваете.


Имею в виду просто запрос в том же QA. К примеру, если запустить select без nolock к большой таблице, то можно ли паралельно запустить еще один запрос тоже без nolock? И можно ли обновить таблицу во время select?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #34 - 03. Декабря 2008 :: 15:06
Печать  
Neo писал(а) 03. Декабря 2008 :: 15:00:
Цитата:
какой запрос вы подрузамеваете.


Имею в виду просто запрос в том же QA. К примеру, если запустить select без nolock к большой таблице, то можно ли паралельно запустить еще один запрос тоже без nolock? И можно ли обновить таблицу во время select?

Если Вы в qa повторите все дейстия что и в 1с получите тоже самое
для sql сервера все его клиенты равноправны и на поток
входящих sql команд выдается поток выходящих ответов.
имеется в виду
begin tran
declare @i integer select @i=1 from _1SJOURN(TABLOCKX HOLDLOCK) where 0=1  --- а вот это и есть блокировка журнала документов при начале модуля проведения.
если здесь остановимся

а в другом qa выдадим
select top 100 * from _1SJOURN
то зависнем на красном кирпиче пока не завершим транцакцию в первом qa
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #35 - 04. Декабря 2008 :: 06:38
Печать  
ps к #34
и еще видите в #34 нет вообще никакой 1с.
а с другой стороны если вы в qa выполните действия  первого qa
то пока Вы их не завершите никто не сможет провести документ.
все 1с.exe будут думать что кто-то другой проводит документ.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #36 - 04. Декабря 2008 :: 13:05
Печать  
Мда, прикольно.
Поэксперименитировал с select из _1sjorn, действительно, висит ожидание блокировки.

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

А блокировка накладывается на всю таблицу во время selectа?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #37 - 04. Декабря 2008 :: 13:48
Печать  
Neo писал(а) 04. Декабря 2008 :: 13:05:
Мда, прикольно.
Поэксперименитировал с select из _1sjorn, действительно, висит ожидание блокировки.

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

А блокировка накладывается на всю таблицу во время selectа?

потому что пи проведении документа не надо блокировать
ra таблицы - движения документа т.к. документ твой и так занят
открытой формой ( т.е. на документе есть файловая блокировка )
а для всех изменений ra главной частью первичного ключа
является id документа.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #38 - 04. Декабря 2008 :: 13:59
Печать  
Цитата:
потому что пи проведении документа не надо блокировать
ra таблицы - движения документа т.к. документ твой и так занят


Давайте не будем привязываться к логике 1С, хотелось бы разобраться именно в блокировках SQL.

Просто если во время во время selecta из RA можно что-то записать в нее, то блокировка не накладывается на всю таблицу, верно?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #39 - 04. Декабря 2008 :: 14:21
Печать  
Neo писал(а) 04. Декабря 2008 :: 13:59:
Цитата:
потому что пи проведении документа не надо блокировать
ra таблицы - движения документа т.к. документ твой и так занят


Давайте не будем привязываться к логике 1С, хотелось бы разобраться именно в блокировках SQL.

Просто если во время во время selecta из RA можно что-то записать в нее, то блокировка не накладывается на всю таблицу, верно?

ну я не такой знаток sql.надо почитать что либо по блокировкам sql.
Если коротко то есть грань между оператором select
и предложением языка t-sql тот же select очень тонкая.
тот же самый Ваш пример
в первом qa пишем
begin tran
update ra... set  lineno_ = lineno_ + 1

в другом qa пишем
select top 100 * from ra...
то второй qa зависнет.
Только пробуйте на тестовой базе какую не жалко.
после того как в этом убедитесь то в первом qa делаем
откат транзакции
rollback

  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #40 - 04. Декабря 2008 :: 14:38
Печать  
Я думаю, что блокировка при selecte если и есть, то скорее всего построчная.

А при проведении документа из 1С ожидается блокировка таблицы _1sjourn (во время selectа) на все время selecta, наверно, потому что 1С пытается наложить монопольную блокировку на всю таблицу, а не потому, что вся таблица заблокирована...  Озадачен
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #41 - 04. Декабря 2008 :: 14:40
Печать  
Цитата:
в первом qa пишем
begin tran
update ra... set  lineno_ = lineno_ + 1

в другом qa пишем
select top 100 * from ra...
то второй qa зависнет.


Это понятно, так как при апдейте блокировка всегда накладывается.

А вот если наоборот: в одном qa запустить select * from ra, а во втором - попробовать проапдейтить, интересно, что будет  Улыбка
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #42 - 04. Декабря 2008 :: 15:06
Печать  
Neo писал(а) 04. Декабря 2008 :: 14:40:
Цитата:
в первом qa пишем
begin tran
update ra... set  lineno_ = lineno_ + 1

в другом qa пишем
select top 100 * from ra...
то второй qa зависнет.


Это понятно, так как при апдейте блокировка всегда накладывается.

А вот если наоборот: в одном qa запустить select * from ra, а во втором - попробовать проапдейтить, интересно, что будет  Улыбка

так пока ты второй запустишь
первый qa уже выполниться.
не не понял грань между select и t-sql  select очень тонка.

Меня вообще когда только изучал sql поразило как это в 4 слова
поместили целый "мир"
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #43 - 04. Декабря 2008 :: 16:02
Печать  
нужно бы как-то прокомментировать ваши посты, но не могу - вы мне мозг разрушили **crazy**
  
Наверх
ICQ  
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #44 - 05. Декабря 2008 :: 07:07
Печать  
Цитата:
так пока ты второй запустишь
первый qa уже выполниться.


Ну к примеру выборка всех записей из _1Sjourn идет секунд 30, так что можно попробовать  Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать