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

Откуда:
Сообщений: 5554
Выполните следующие команды в Query Analyzer:

-- Начинаем транзакцию
BEGIN TRANSACTION

-- Очищаем таблицу товаров
DELETE Товары
Теперь откройте еще одну копию программы или установите новое соединение, выбрав меню File/Connect (Файл/Соединиться). В новом окне напишем и выполним следующий запрос:

SELECT *
FROM Товары
Таблица товаров достаточно маленькая, но не смотря на это, запрос будет выполняться долго. А если быть точнее, он не выполниться, потому что во втором окне с другой сессией выполняется транзакция удаления, и эта транзакция еще не завершилась.

Уровень изоляции READ COMMITTED
Почему тогда нельзя сделать select из редактируемой таблицы?
6 мар 14, 21:18    [15685488]     Ответить | Цитировать Сообщить модератору
 Re: Управление транзакциями  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Gallemar,

Заблокированы записи которые ты пытаесся выбрать. Вот почему.

Вооот отсуда начинай читать: http://msdn.microsoft.com/ru-ru/library/ms173763.aspx
6 мар 14, 21:23    [15685508]     Ответить | Цитировать Сообщить модератору
 Re: Управление транзакциями  [new]
Gallemar
Member

Откуда:
Сообщений: 5554
ZOOKABAKODER
Gallemar,

Заблокированы записи которые ты пытаесся выбрать. Вот почему.

Вооот отсуда начинай читать: http://msdn.microsoft.com/ru-ru/library/ms173763.aspx


Read Committed - невоспроизводимое (или неповторяемое) чтение. Транзакция может читать только те изменения, которые были подтверждены другими транзакциями. Например, если транзакции A и B стартовали и поменяли записи, то они не видят изменения друг друга. Транзакция А увидит изменения транзакции B только тогда, когда транзакция B завершится по commit. Перечитывание данных в транзакции может выдавать разные результаты.

Или у MS SQL этот уровень по другому работает?
6 мар 14, 21:38    [15685547]     Ответить | Цитировать Сообщить модератору
 Re: Управление транзакциями  [new]
Gallemar
Member

Откуда:
Сообщений: 5554
Если сравнить между Firebird и MS SQL - в Firebird если начать транзакцию и сделать инсерт без завершения (грубо говоря транзакция висит) то селект к таблице пройдет нормально (фетч всех данных до инсерта), в MS SQL - селект просто висит и в менеджере показывает блокировку транзакции
6 мар 14, 21:43    [15685563]     Ответить | Цитировать Сообщить модератору
 Re: Управление транзакциями  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Gallemar,
1. SQL Server Profiler, сделай трассировку по событиям: Lock:Acquired, Lock:Released и для наглядности ещё SQL:StmtStarting SQL:StmtComplete и смотри что там и как блокируется.
2. sys.dm_tran_locks покажет текущие блокировки.

PS: ну почитай сам пожалуйста, ну напрягись. Там по ссылкам можно найти что и как SQL блокирует.
6 мар 14, 21:49    [15685584]     Ответить | Цитировать Сообщить модератору
 Re: Управление транзакциями  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Gallemar
Если сравнить между Firebird и MS SQL - в Firebird если начать транзакцию и сделать инсерт без завершения (грубо говоря транзакция висит) то селект к таблице пройдет нормально (фетч всех данных до инсерта), в MS SQL - селект просто висит и в менеджере показывает блокировку транзакции

Возможно (я не знаю, но предполагаю), Firebird использует версионирование; а SQL блокировочник.
Изоляция транзакций, read committed в данном случае, требует чтоб одна транзакция не видела незафиксированных изменений другой. А как она их не увидит, это уже реализация.
6 мар 14, 21:53    [15685598]     Ответить | Цитировать Сообщить модератору
 Re: Управление транзакциями  [new]
Gallemar
Member

Откуда:
Сообщений: 5554
ZOOKABAKODER,а в MS SQL 2012 можно версионность включить?
6 мар 14, 21:56    [15685606]     Ответить | Цитировать Сообщить модератору
 Re: Управление транзакциями  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Gallemar
а в MS SQL 2012 можно версионность включить?
SQL Server Transaction Locking and Row Versioning Guide
Overhead of Row Versioning
6 мар 14, 22:19    [15685666]     Ответить | Цитировать Сообщить модератору
 Re: Управление транзакциями  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
Gallemar
ZOOKABAKODER,а в MS SQL 2012 можно версионность включить?

Использование версионирования может значительно снизить производительность базы данных. Протестируйте сначала.
7 мар 14, 11:04    [15687282]     Ответить | Цитировать Сообщить модератору
 Re: Управление транзакциями  [new]
Gallemar
Member

Откуда:
Сообщений: 5554
Владислав Колосов
Gallemar
ZOOKABAKODER,а в MS SQL 2012 можно версионность включить?

Использование версионирования может значительно снизить производительность базы данных. Протестируйте сначала.

Конечно
У меня проблемы с БД,но понять что с ней не могу. Ресурсов с избытком,а простая выборка тормозит.
7 мар 14, 14:39    [15688927]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить