Использование IsolationLevel. Снимок, но DB все еще блокирует

Итак, я немного погуглил, но ни один из ответов не был удовлетворительным.

Но случайно, при прокрутке man-страниц pip (утилита для установки пакетов, поддерживаемых python - одна из них - virtualenv), было задокументировано использование ключевого слова «uninstall» с pip, ниже приведен точный вывод прямо из моего терминала


indresh-VBX] **$ sudo pip uninstall virtualenv**

Каталог '/home/indresh/.cache/pip/http' или его родительский каталог не принадлежат текущему пользователю, и кэш отключен. Пожалуйста, проверьте разрешения и владельца этого каталога. Если вы выполняете pip с помощью sudo, вам может потребоваться флаг -do sudo.

Uninstalling virtualenv-15.1.0: 
  /usr/bin/virtualenv

  /usr/local/bin/virtualenv
  /usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/DESCRIPTION.rst
  /usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/INSTALLER
  /usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/METADATA
  /usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/RECORD
  /usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/WHEEL
  /usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/entry_points.txt
  /usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/metadata.json
  /usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/top_level.txt
  /usr/local/lib/python2.7/dist-packages/virtualenv.py
  /usr/local/lib/python2.7/dist-packages/virtualenv.pyc
  /usr/local/lib/python2.7/dist-packages/virtuakmr.ndrsh@gmail.comlenv_support/__init__.py
  /usr/local/lib/python2.7/dist-packages/virtualenv_support/__init__.pyc
  /usr/local/lib/python2.7/dist-packages/virtualenv_support/argparse-1.4.0-py2.py3-none-any.whl
  /usr/local/lib/python2.7/dist-packages/virtualenv_support/pip-9.0.1-py2.py3-none-any.whl
  /usr/local/lib/python2.7/dist-packages/virtualenv_support/setuptools-28.8.0-py2.py3-none-any.whl
  /usr/local/lib/python2.7/dist-packages/virtualenv_support/wheel-0.29.0-py2.py3-none-any.whl
Proceed (y/n)? y
  Successfully uninstalled virtualenv-15.1.0
The directory '/home/indresh/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
--------------------------------
7
задан Community 23 May 2017 в 11:45
поделиться

2 ответа

Уровень изоляции SNAPSHOT влияет, как и все уровни изоляции, только на чтение. Записи все еще блокируют друг друга. Если вы считаете, что то, что вы видите, является блоками чтения, то вам следует продолжить исследование и проверить типы ресурсов и имена ресурсов, на которых происходит блокировка (wait_type и wait_resource в sys.dm_exec_requests ).

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

8
ответ дан 7 December 2019 в 01:25
поделиться

Вы проверяли блокировки, когда один разработчик приостанавливает транзакцию? Кроме того, простое включение уровня изоляции моментального снимка не имеет большого эффекта. Вы установили ALLOW_SNAPSHOT_ISOLATION ON?

Вот шаги:

ALTER DATABASE <databasename>
SET READ_COMMITTED_SNAPSHOT ON;
GO

ALTER DATABASE <database name>
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO

После того, как база данных была включена для изоляции моментальных снимков, разработчики и пользователи должны затем запросить, чтобы их транзакции выполнялись в этом режиме моментальных снимков. Это должно быть сделано перед запуском транзакции либо с помощью клиентской директивы в объекте транзакции ADO.NET, либо в их запросе Transact-SQL с помощью следующего оператора:

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

Raj

2
ответ дан 7 December 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: