Где я могу найти хорошее введение в блокировку SQL и стратегии транзакций - PullRequest
3 голосов
/ 27 февраля 2009

Я использую блокировки и транзакции, как программист VBA Excel, пытаясь написать многопоточный сервер C ++ впервые ...

Я пытался спросить совета у моих коллег, но хотя мы все достаточно хороши (или мы так думаем) в разработке сложных баз данных, написании быстрых и эффективных запросов, использовании индекса и ограничений, когда это необходимо, и так далее Никто из нас не обладает хорошим знанием этой темы.

Все онлайн-ресурсы, которые я нашел, являются либо синтаксическими ссылками, либо фиктивными учебниками, объясняющими, что транзакция начинается с 'begin tran' и заканчивается фиксацией или откатом.

Я тоже просмотрел ТАК без успеха.

Что я ищу, так это список простых реальных проблем, а также правильный способ их решения.

Пример:

Допустим, у меня есть таблица с одним активным битовым столбцом, и я не хочу иметь две активные строки одновременно. Конечно, многие процессы могут пытаться вставлять данные одновременно.

  • я должен заблокировать всю таблицу?
  • или, может быть, использовать ограничение данных, чтобы вставка второй «активной» строки не удалась?
  • или использовать транзакцию с повторяемым уровнем изоляции для чтения?
  • или, может быть, напишите:

    update tbFoo set Active = 0 вставить в tbFoo (foo, Active), выбрать «foo», 1 там, где его нет (выбрать * из tbFoo, где Active = 1)

Пожалуйста, не комментируйте / не отвечайте на эту конкретную проблему и на мои глупые предложения. Я просто пытаюсь определить тот факт, что я не имею понятия:)

Где я могу найти несколько хороших прохождений по простым, но актуальным ситуациям блокировки? Если что-то изменится, я использую SQL Server 2008

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

Ответы [ 3 ]

1 голос
/ 27 февраля 2009

Q & A от Chas Boyd

Kalen Delaney артикул

И, конечно же, старый добрый BOL

Для SQL 2008 вы, вероятно, можете использовать MERGE , чтобы выполнить обновление и вставить в одну инструкцию транзакции.safe. Я еще не использовал его, поэтому я бы сделал один из них: - Триггер, чтобы проверить после факта (так что это в той же транзакции) - Замок TABLOCKX для MERGE

В этом случае, однако, проверьте эту ветку мой ответ , конечно:)

1 голос
/ 08 декабря 2009

Лучше всего, на мой взгляд, если вам действительно нужно понять, как блокировки и транзакции работают на SQL-сервере, это выяснить, как работает механизм SQL-сервера внутри.

Я нашел книгу «Внутри Microsoft® SQL Server® 2008: Программирование на T-SQL» как наиболее полное руководство.

Раздел «Обработка транзакций, параллелизм и обработка ошибок» должен помочь вам в решении конкретной проблемы.

Однако я обнаружил, что из всех разделов книги я узнал маленькие самородки, которые облегчили мне жизнь при работе с сервером SQL.

Я знаю, что в наши дни покупка бумажной книги кажется почти ностальгической, но я бы порекомендовал ее, так как мне было трудно получить исчерпывающее руководство онлайн!

1 голос
/ 27 февраля 2009

Чтобы понять это, вам нужно углубиться в документацию по конкретному продукту.

Это зависит от продукта, а то, что работает в одних данных, не работает в других. Тем не менее, в большинстве случаев будет достаточно тщательного выбора уровня изоляции, и только когда вы начнете толкать вещи, потребуется более широкое использование подсказок запроса.

Для SQL Server «Внутри SQL Server 2000» (MSPress) я получил достаточно деталей, чтобы знать, что большую часть времени мне не нужен этот уровень детализации (а также работа с людьми с десятилетиями специализации Oracle).

...