[英]Changing MySQL isolation level on Django/Elastic beanstalk/RDS
我正在嘗試通過 Django 應用程序更改 RDS 上我的 MySQL 實例的隔離級別。 我已經按照這里的建議
因此,我將 Django 數據庫設置更改為:
'OPTIONS': {
'init_command': 'SET default_storage_engine=INNODB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED'
}
當我直接在數據庫(MySQL 版本 8.0.13)中運行時,此命令工作正常但是,當我嘗試將其部署到 Elastic Beanstalk 時,出現以下錯誤:
Command failed on instance. Return code: 1 Output: (TRUNCATED)... manual that corresponds to your MySQL server version for the right syntax to use near 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED' at line 1")
我還嘗試將行更改為:
SET default_storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
結果相同
知道可能出什么問題了嗎? 或者我可以使用的另一種解決方案(也許我可以運行此命令並將其設置為全局隔離級別?)
也許OPTIONS
無法處理2個命令。 因此,刪除第一個-僅在創建新表時有用。 並且可能需要在需要執行的任何CREATE TABLEs
上指定ENGINE=InnoDB
。 無論如何,我希望AWS默認使用該功能。 8.0具有該引擎默認值。
您能像下面那樣嘗試嗎,任何人都應該工作。
SET @@SESSION.transaction_isolation = value;
SET SESSION transaction_isolation = value;
SET transaction_isolation = value;
對於MySQL ,您將能夠通過運行settings.py
中的原始查詢來設置和檢查READ COMMITTED
,如下所示:
# "settings.py"
from django.db import connection
# ...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB_NAME',
'USER': 'DB_USER',
'PASSWORD': 'DB_PASSWORD',
'HOST': 'localhost',
'PORT': '3306',
}
}
# ↓ ↓ ↓ Set isolation level ↓ ↓ ↓
cursor = connection.cursor()
query = """
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
"""
cursor.execute(query)
# ↓ ↓ ↓ Check isolation level ↓ ↓ ↓
cursor.execute('SELECT @@GLOBAL.transaction_isolation;')
print(cursor.fetchone()) # ('read committed',)
* settings.py
每次運行Django 服務器使用以下命令運行或每次Django 服務器通過編寫代碼重新加載因此每次設置事務Django 服務器使用以下命令運行或每次Django 服務器通過編寫代碼重新加載:
python manage.py runserver 0.0.0.0:8000
對我來說PostgreSQL , "init_command": ...
和"isolation_level"
in "OPTIONS": {}
不起作用,所以我無法在settings.py
中設置SERIALIZABLE
:
# "settings.py"
"OPTIONS": {
"init_command": "ALTER DATABASE postgres SET DEFAULT_TRANSACTION_ISOLATION TO 'SERIALIZABLE';"
"isolation_level": psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE,
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.