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

Откуда:
Сообщений: 7
Примерный круг вопросов:
1. Как установить блокировку на записи таблицы по значению поля (полей)? Тип ресурса транзакции KEY.
2. Как правильно установить режим изоляции транзакций snapshot, как понять какой уровень изоляции сейчас используется.
3. Как по информации от менеджера блокировок получить данные, которые заблокированы
4. Как сделать, чтобы запрос не ставил блокировку на данные (при чтении и записи)
5. Как управлять эскалацией блокировок (отключить, поднять порог срабатывания)
6. Как получить текст запроса, установившего данную блокировку

Если у вас есть возможность ответить на подобные вопросы, пишите на 1cab@mail.ru для обсуждения деталей взаимодействия.
21 дек 12, 11:40    [13664732]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35380
Блог
вас интересуют ответы или это нечто вроде теста?
21 дек 12, 12:28    [13665088]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Злой Бобр
Member

Откуда: Украина, Кривой Рог
Сообщений: 3604
Дмитрий Шиляев,

Т.е. хелп Ві принципиально нечитаете? Ну уж извините, у мелкомягких описалово получше Оракла будет. Так что научитесь пользоваться хелпом и будет вам счастье. А так сходите на профильные курсы, т.к. вопросы впринципе даже не на "среднячка".
21 дек 12, 12:41    [13665171]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Дмитрий Шиляев
Member

Откуда:
Сообщений: 7
К сожалению не имею свободного времени, чтобы все прочитать и найти ответы на свои вопросы, поэтому решил обратиться к профессионалам.

В резульатате интересует что конкретно нужно сделать чтобы добиться нужного мне резульатата. Вот пример вопроса по теме
1. Как установить блокировку на записи таблицы по значению поля (полей)? Тип ресурса транзакции KEY:

Есть база данных SQL (BaseTest), в ней есть таблица (TableInBase1)
В таблице есть несколько полей, в том числе два поля, которые нас интересуют: _RecorderTRef (binary(4)), _RecorderRRef(binary(16))

В таблице есть 10000 записей по _RecorderTRef = TRef1 и _RecorderRRef = RRef1 ну и другие записи естественно

"приложение, сформировавшее запрос к SQL" передает запрос:

DELETE FROM TableInBase1 WHERE _RecorderTRef = TRef1 AND _RecorderRRef = RRef1

В результате выполнения запроса судя по данным sys.dm_tran_locks
устанавливаются блокировки к таблице TableInBase1 c request_mode = X, resource_type = KEY в количестве 10000 штук или что-то подобное.

Вопрос: как сделать так, чтобы в этом случае была установлена одна блокировка типа KEY (как я понимаю по значению ключа индекса)
для индекса со значением _RecorderTRef = TRef1 AND _RecorderRRef = RRef1?

Для чего это надо: как я понял при таком количестве мелких блокировок происходит эскалация блокировок и блокируется вся таблица по X, я бы хотел заменить эти 10000 блокировок одной.

В результате я бы хотел иметь указания типа:
Вам нужно сделать такой-то индекс, выполнить такие-то действия.

Я делаю это и вижу, что получилась одна блокировка.
Я счаслив.

Модератор: Тема перенесена из форума "Вакансии".


Сообщение было отредактировано: 21 дек 12, 13:39
21 дек 12, 13:31    [13665516]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Дмитрий Шиляев,

Покажите структуру вашей TableInBase1 (скрипт CREATE TABLE + все индексы и констрейнты).
21 дек 12, 13:51    [13665666]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Дмитрий Шиляев
Member

Откуда:
Сообщений: 7
Вообще я размещал пост в разделе вакансии, т.к. предполагал получение ответов на платной основе, но модераторы пост переместили сюда.
Не хотелось бы сваливаться в обсуждение здесь, если вы обладаете квалификацией для ответов на вопросы, которые в первом сообщении перечислены, давайте обсудим условия в личной переписке.
21 дек 12, 14:11    [13665806]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
aleks2
Guest
Дмитрий Шиляев
Примерный круг вопросов:
4. Как сделать, чтобы запрос не ставил блокировку на данные (при чтении и записи)


Запись (insert or update) ФСЕГДА ставит блокировку.

ЗЫ. Вы безграмотны.
21 дек 12, 14:18    [13665861]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35380
Блог
1. Как установить блокировку на записи таблицы по значению поля (полей)? Тип ресурса транзакции KEY.
подсказка ROWLOCK, подробнее тут http://msdn.microsoft.com/ru-ru/library/ms187373.aspx

2. Как правильно установить режим изоляции транзакций snapshot, как понять какой уровень изоляции сейчас используется.читайте
http://msdn.microsoft.com/en-us/library/ms173763.aspx (SET TRANSACTION ISOLATION LEVEL)
http://msdn.microsoft.com/ru-ru/library/bb522682.aspx (Табличные указания (Transact-SQL))
DBCC USEROPTIONS;

3. Как по информации от менеджера блокировок получить данные, которые заблокированыsp_lock
select * from sys.objects

4. Как сделать, чтобы запрос не ставил блокировку на данные (при чтении и записи)
никак

5. Как управлять эскалацией блокировок (отключить, поднять порог срабатывания)
читайте про DBCC TRACEON
и флаги трассировки 1211, 1224
а также sp_configure locks

6. Как получить текст запроса, установившего данную блокировку
select session_id, status, wait_type, command, last_wait_type, percent_complete, qt.text, total_elapsed_time/1000 as [total_elapsed_time, сек],
wait_time/1000 as [wait_time, сек], (total_elapsed_time - wait_time)/1000 as [work_time, сек]
from sys.dm_exec_requests as qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
where session_id >= 50 and session_id <> @@spid
order by 1

select *
from sys.sysprocesses where spid > 50 and spid <> @@spid and status <> 'sleeping'
order by spid, ecid
21 дек 12, 14:19    [13665873]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Дмитрий Шиляев
Member

Откуда:
Сообщений: 7
aleks2
Дмитрий Шиляев
Примерный круг вопросов:
4. Как сделать, чтобы запрос не ставил блокировку на данные (при чтении и записи)


Запись (insert or update) ФСЕГДА ставит блокировку.

ЗЫ. Вы безграмотны.


Не претендую... Был бы грамотен в этом вопросе, помощи бы не просил
21 дек 12, 14:20    [13665877]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Дмитрий Шиляев
Member

Откуда:
Сообщений: 7
Критик
3. Как по информации от менеджера блокировок получить данные, которые заблокированыsp_lock
select * from sys.objects

Тут мы получаем имя таблицы, мне нужны конкретные данные котоыре заблокированы (значения, хранящиеся в заблокированных записях)

Критик
5. Как управлять эскалацией блокировок (отключить, поднять порог срабатывания)
читайте про DBCC TRACEON
и флаги трассировки 1211, 1224
а также sp_configure locks


Флаги менял - не помогло

Критик
6. Как получить текст запроса, установившего данную блокировку
select session_id, status, wait_type, command, last_wait_type, percent_complete, qt.text, total_elapsed_time/1000 as [total_elapsed_time, сек],
wait_time/1000 as [wait_time, сек], (total_elapsed_time - wait_time)/1000 as [work_time, сек]
from sys.dm_exec_requests as qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
where session_id >= 50 and session_id <> @@spid
order by 1

select *
from sys.sysprocesses where spid > 50 and spid <> @@spid and status <> 'sleeping'
order by spid, ecid


Здесь не вижу привязки к блокировке (блокировки получаю из sys.dm_tran_locks)

Еще раз - в первом сообщении примеры вопросов, а не сами вопросы. Если считате, что сможете помочь, давайте обсудим условия
21 дек 12, 14:35    [13665991]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
310719
Guest
Критик
4. Как сделать, чтобы запрос не ставил блокировку на данные (при чтении и записи)
никак


А разве NOLOCK тоже ставить блокировку?
21 дек 12, 15:15    [13666377]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
310719
А разве NOLOCK тоже ставить блокировку?

update Таблица with(nolock)
set Столбец = "Значение"

автор
Msg 1065, Level 15, State 1, Line 15
The NOLOCK and READUNCOMMITTED lock hints are not allowed for target tables of INSERT, UPDATE or DELETE statements.
21 дек 12, 15:21    [13666439]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Гость333,

Дмитрий Шиляев
4. Как сделать, чтобы запрос не ставил блокировку на данные (при чтении и записи)
21 дек 12, 15:29    [13666559]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
NOLOCK_yes
Guest
310719
Критик
4. Как сделать, чтобы запрос не ставил блокировку на данные (при чтении и записи)
никак


А разве NOLOCK тоже ставить блокировку?


Transactions running at the READ UNCOMMITTED level do not issue shared locks to prevent other transactions from modifying data read by the current transaction.
21 дек 12, 15:31    [13666588]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35380
Блог
ну ладно, при nolock-чтении может быть блокировка схемы + будет S-блокировка на базу )
21 дек 12, 15:39    [13666702]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Crimean
Member

Откуда:
Сообщений: 13147
я вот только не пойму, почему никто на указанный мыл не пишет "для обсуждения деталей взаимодействия"
21 дек 12, 15:41    [13666733]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Дмитрий Шиляев
Member

Откуда:
Сообщений: 7
Crimean
я вот только не пойму, почему никто на указанный мыл не пишет "для обсуждения деталей взаимодействия"

Из этого форума так никто и не написал на мыло...
21 дек 12, 15:53    [13666872]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35380
Блог
Я не пишу, т.к. занимаюсь в основном DWH, там проблем с блокировками нет и не будет из-за особенностей построения таких систем. А вот те, кто занимается OLTP, лучше знают тему, им и флаг в руки )
21 дек 12, 15:53    [13666882]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35380
Блог
Дмитрий Шиляев,

вам стоило бы озвучить ценник, шансы бы повысились
21 дек 12, 15:54    [13666896]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Дмитрий Шиляев
Member

Откуда:
Сообщений: 7
Критик
Дмитрий Шиляев,

вам стоило бы озвучить ценник, шансы бы повысились


Хотелось бы уложиться в 5000
21 дек 12, 16:08    [13667047]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
310719
Guest
Критик
ну ладно, при nolock-чтении может быть блокировка схемы + будет S-блокировка на базу )


А как проверить? Просто любопытно. Думал, что при nolock-чтении нет блокировок, грязное же чтение. И где почитать про S-блокировку?
21 дек 12, 16:18    [13667136]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35380
Блог
310719,

всё это всегда проверяется так:
2 коннекта в SSMS + использование sp_lock
21 дек 12, 16:35    [13667286]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
Гость333
Member

Откуда:
Сообщений: 3683
310719
Критик
ну ладно, при nolock-чтении может быть блокировка схемы + будет S-блокировка на базу )


А как проверить? Просто любопытно. Думал, что при nolock-чтении нет блокировок, грязное же чтение. И где почитать про S-блокировку?

Будет блокировка не данных, а метаданных. Проверить можно так:
1) Создаёте тестовую таблицу
create table ttt(id int)

2) В одной коннекции изменяете структуру таблицы, используя транзакцию:
begin transaction
alter table ttt add x int

3) В другой коннекции делаете чтение с nolock:
select * from ttt with(nolock)

4) Запрос на чтение висит, а мы мониторим ситуацию с блокировками (spid1, spid2 — идентификаторы процессов из пп.2, 3):
select * from sys.dm_tran_locks where request_session_id in (<spid1>, <spid2>)


В итоге видим, что запрос из п.2 держит на таблице блокировку Sch-M (Schema Modification), а запрос из п.3 пытается наложить на таблицу блокировку Sch-S (Schema Stability). Эти типы блокировок несовместимы (см. таблицу http://msdn.microsoft.com/en-us/library/ms186396(v=sql.105).aspx), поэтому видим ожидание.
21 дек 12, 16:42    [13667358]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
похоже на вопросы для собеседования
22 дек 12, 19:08    [13671270]     Ответить | Цитировать Сообщить модератору
 Re: Требуются консультации по работе с MS SQL Server 2005  [new]
aleks2
Guest
MyNiGoo
похоже на вопросы для собеседования


Только правильный ответ на эти вопросы на собеседовании - "Это фсе ненужное фуфло в нормальном процессе разработки. О другом думать надо.".
24 дек 12, 08:44    [13674969]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить