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

Откуда:
Сообщений: 23
Добрый день!

Копирую обсуждение (4 поста) с форума TechNet - там спецы MS не помогли к сожалению:

===
Добрый день!
У меня несколько вопросов:
Выполняю запрос:
ALTER DATABASE DBNavision SET READ_COMMITTED_SNAPSHOT ON;
Он по выполняется уже 11 часов. Сколько он примерно выполняется и как рассчитывать время выполнения подобного запроса?
Перед этим переводил базу в режим версионности:

ALTER DATABASE DBNavision SET ALLOW_SNAPSHOT_ISOLATION ON;

А эффекта что-то вообще никакого - ошибки типа "данные заблокированы другим пользователем" никуда не пропали. Хотя в августе делал тестовый прогон - все было замечательно и без блокировок. Правда тогда был установлен SP1. Менялось ли что-нибудь в архитектуре SQL после SP2?

Каким способом можно еще избежать блокировок в базе?
Заранее спасибо!
===
Ilgiz Mamyshev:
Использование Snapshot – изоляции будет разрешено (ON) только после того, как выполняющиеся в настоящее время транзакции будут завершены. До этих пор состояние этой опции будет находиться в промежуточном состоянии: Pending_On (или Pending_Off при попытке отключить опцию).

SQL Server 2005. Snapshot - изоляция транзакций
Проверить наличие открытых в данный момент транзакций вы можете выполнив запрос:
T-SQL запросDBCC opentran
Очередь блокировок можно увидеть выполнив запрос:
T-SQL запросsp_who2
Убить "мешающий" процесс:
T-SQL запросkill 55
Или просто перезагрузите сервер БД (если есть такая возможность) и повторите запрос
T-SQL запросALTER DATABASE DBNavision SET READ_COMMITTED_SNAPSHOT ON
===

Про: ALTER DATABASE DBNavision SET READ_COMMITTED_SNAPSHOT ON
Выполняется он моментально, режим пединг_он прохидит втечение нескольких секунд, и включается режим версионности.
Подтверждается это запросом:
Select name, snapshot_isolation_state, snapshot_isolation_state_desc from sys.databases
Который возвращает:DBNavision, 1, ON
Запрос ALTER DATABASE DBNavision SET READ_COMMITTED_SNAPSHOT ON у меня выполняется уже 16,5 часов. Рекомендуете перезапустить сервер и выполнить первой же операцией? Т.е. он должен пройти также быстро, как и аллоу снапшот изолейшн (секунд 5)?

===позже добавил===

Включил снапшот изоляцию и рид коммитед режимы для БД.
=
Теперь понял, что нужно для каждой конкретной транзакции использовать следующие режимы:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
=
Есть ли способ установить эти режимы для всех транзакций?

Поясню почему такой странный запрос: у меня стоит MBS Navision, изапросы в базу там редактировать нельзя на уровне транзакций. в результате блокировок не избежать. А вот еслибы общий режим транзакций как-то изменить - скорость бы выстрелила.
12 ноя 08, 20:09    [6431549]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
На какой из вопросов вам надо отвечать? Там несколько.
12 ноя 08, 20:32    [6431586]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
Hiromant
Member

Откуда:
Сообщений: 23
Включен режим версионности для базы.
Как реализовать возможность isolation level snapshot врамках любого запроса (или любой сессии/транзакции и т.п.) без изменения кода запросов (в Navision это просто-напросто не возможно)?
12 ноя 08, 20:49    [6431626]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Теперь понял, что нужно для каждой конкретной транзакции использовать следующие режимы:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
=
Есть ли способ установить эти режимы для всех транзакций?


Неправильно поняли, если учитывать, что READ COMMITTED это дефолтный уровень, и при включенной опции бд READ_COMMITTED_SNAPSHOT версионность включается автоматически, обеспечивая при RC постатементную консистентность, и приводя к результату, когда читатели не мешают писателям и наоборот.

автор
Как реализовать возможность isolation level snapshot врамках любого запроса (или любой сессии/транзакции и т.п.) без изменения кода запросов


Для этого обязательна инструкция SET TRANSACTION ISOLATION LEVEL SNAPSHOT.
13 ноя 08, 08:50    [6432498]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
Hiromant
Member

Откуда:
Сообщений: 23
Правильно я понял, что если выполнено: ALTER DATABASE Database SET READ_COMMITTED_SNAPSHOT ON;
..то дефолтный уровень становится РидКоммитедСнэпшот, и никто никого не может блокировать?
Этот режим у меня включился, а пользователи продолжают блокировать друг-друга при чтении-записи..
Или этот режим требует SET TRANSACTION ISOLATION LEVEL READ COMMITTED SNAPSHOT?
Вот как сделать такой режим по умолчанию для всех запросов?

(сори за ОТКРОВЕННОЕ ламмерство, по БД у меня абсолютно нулевой уровень)
13 ноя 08, 09:48    [6432788]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Правильно я понял, что если выполнено: ALTER DATABASE Database SET READ_COMMITTED_SNAPSHOT ON;
..то дефолтный уровень становится РидКоммитедСнэпшот, и никто никого не может блокировать?


Нет уровня "РидКоммитедСнэпшот"! Просто при дефолтном уровне используется версионность и разделяемые блокировки при чтении не накладываются.

автор
Этот режим у меня включился, а пользователи продолжают блокировать друг-друга при чтении-записи..


Приведите подробное описание того, что происходит, с указанием списка локов и сообщений сервера, ибо

автор
"данные заблокированы другим пользователем"


это не ошибка MS SQL, и "блокировки" могут быть от самой навижн и не являться блокировками в терминах MS SQL.

автор
Или этот режим требует SET TRANSACTION ISOLATION LEVEL READ COMMITTED SNAPSHOT?


Этот - это какой? Вы почитали для для чего нужен это TIL?!

автор
Вот как сделать такой режим по умолчанию для всех запросов?


Задлянафига?!

Сообщение было отредактировано: 13 ноя 08, 09:56
13 ноя 08, 09:55    [6432846]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
Hiromant
Member

Откуда:
Сообщений: 23
Т.е. в этих режимах блокировок быть не должно?
13 ноя 08, 11:08    [6433312]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Hiromant
Т.е. в этих режимах блокировок быть не должно?


Ну нельзя так говорить "блокировок быть не должно", не оговаривая чего с чем.
13 ноя 08, 12:50    [6434281]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
Hiromant
Member

Откуда:
Сообщений: 23
При записи в таблицу читающий запрос не будет блокироваться?
13 ноя 08, 12:53    [6434311]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Hiromant
При записи в таблицу читающий запрос не будет блокироваться?


Я, как мне казалось, уже описал поведение при RC и включенной опции READ_COMMITTED_SNAPSHOT.
13 ноя 08, 16:51    [6436560]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
Hiromant
Member

Откуда:
Сообщений: 23
Окей, понял.

Нашел как выполнить в Navision прямой SQL-запрос, очень кривой способ, но вроде работает.
Вот есть запрос: SET TRANSACTION ISOLATION LEVEL SNAPSHOT - включение режима снапшот в рамках транзакции.
Какой запрос нужно выполнить, чтобы этот режим работал в рамках сессии?
13 ноя 08, 21:03    [6438052]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Hiromant
Какой запрос нужно выполнить, чтобы этот режим работал в рамках сессии?
Эээ:
http://msdn.microsoft.com/ru-ru/library/ms173763(SQL.90).aspx
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
...
Одновременно может быть установлен только один параметр уровня изоляции, который продолжает действовать для текущего соединения до тех пор, пока не будет явно изменен.
Вы бы почитали доку сначала, а то рискуете такого напортачить, что потом сами будете за голову хвататься.
13 ноя 08, 21:17    [6438078]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
Mr Marmelad
Member [заблокирован]

Откуда: Boston MA
Сообщений: 2957
Hiromant

Вот есть запрос: SET TRANSACTION ISOLATION LEVEL SNAPSHOT - включение режима снапшот в рамках транзакции. Какой запрос нужно выполнить, чтобы этот режим работал в рамках сессии?


Коммандой SET TRANSACTION ISOLATION LEVEL SNAPSHOT Вы и установите вашу сессию во всей ее протяжённости или пока не переключитесь как нибудь так SET TRANSACTION ISOLATION LEVEL READ COMMITED НО: по умолчанию база не разрешит Вам запустить такую команду. Будет ругаться:


SQL

Msg 3952, Level 16, State 1, Line 1
Snapshot isolation transaction failed accessing database 'AdvantureWorks' because snapshot isolation is not allowed in this database. Use ALTER DATABASE to allow snapshot isolation.


И тогда :


USE AdvantureWorks;
GO
ALTER DATABASE AVK SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO
BEGIN TRANSACTION;
GO
SELECT * 
    FROM HumanResources.EmployeePayHistory;
GO
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
GO
SELECT * 
    FROM HumanResources.Department;
GO
COMMIT TRANSACTION;
GO
ALTER DATABASE AVK SET ALLOW_SNAPSHOT_ISOLATION OFF;
GO
13 ноя 08, 21:28    [6438093]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
m.patrakov
Member

Откуда:
Сообщений: 14
Так сколько приблизительно по времени будет выполнятся ALTER DATABASE Database SET READ_COMMITTED_SNAPSHOT ON на базе в 10 гигов?
14 сен 12, 06:06    [13161753]     Ответить | Цитировать Сообщить модератору
 Re: Версионный режим работы базы (SQL 2005 SP2 Ent x64)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
m.patrakov
Так сколько приблизительно по времени будет выполнятся ALTER DATABASE Database SET READ_COMMITTED_SNAPSHOT ON на базе в 10 гигов?
Столько, сколько будут висет "левые" коннекты к базе.
А так, если никого нет - практически мгновенно.
14 сен 12, 06:28    [13161764]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить