Prevent database locks when uploading a file in a transaction
我具有一项功能,用户可以查看所有上传的文件。为此,我要在数据库中插入一条记录,然后将文件上传到AWS S3。我正在使用记录中的ID作为文件名。例如,如果id为53,则文件名为
I am worried the database will be locked during this long operation. Is there a way to prevent the database from being locked?
您不必担心数据库被阻塞,唯一需要对数据库进行排他锁的事务是Alter数据库语句,它们需要排他锁,并且有可能阻塞整个数据库。
您不必担心对象级事务会阻塞数据库
下面的
是示例锁屏幕截图,当我并行运行两个inserts语句时拍摄。如您对Insert所见,SQLServer正在获取对象的(IX lock)状态,该对象声明"我将仅在下面的层上锁定某些内容"表... "
因此,在这种情况下,如果要运行另一个需要从同一表中选择id并将其插入到同一表中的事务,则select将被阻止(在运行默认隔离级别的普通SQLServer上)。插入...
但是SQLAzure默认情况下在RCSI上运行,简单来说,这意味着"不会阻止读取会话" \\ ..
我不确定,是否也适用于AWS中的SQLServer ??。.您可以通过在查询下面运行(检查隔离级别desc列)进行检查。
1 | select * from sys.databases |