我们的客户遇到了数据库应用程序的一些阻塞问题.我们要求他们运行阻塞进程报告跟踪,他们给我们的跟踪显示在SELECT和UPDATE操作之间发生阻塞.跟踪文件显示以下内容:
所以基本上我们不知道为什么SELECT查询的隔离级别不是默认的ReadCommitted IsolationLevel,更令人困惑的是,为什么查询的IsolationLevel会随着时间的推移而改变?只有一个客户看到此行为,因此我们怀疑它可能是数据库配置问题.
有任何想法吗?
提前致谢,
格雷厄姆
如何使用mysqli在PHP中将事务的隔离级别设置为"SERIALIZABLE"?我到处寻找,我找不到任何有关它的信息.
以下是隔离级别的说明.
使用SET TRANSACTION ISOLATION LEVEL REPEATABLE READ时有哪些风险或性能下降?
我们有一些从BizTalk服务调用的SP.我们有时会遇到僵局.如果我们改变隔离级别,有哪些风险和可能的性能退化?
我正在使用以下格式使用linq将更改提交到我的数据库.
Begin Transaction (Scope Serialized, Required)
Check Business Rule 1...N
MyDataContext.SubmitChanges()
Save Changes Done In Previous Query To Log File
End Transaction Scope
Run Code Online (Sandbox Code Playgroud)
但是在SQL Server探查器中,我在Connection:Start中看到以下行.
set transaction isolation level read committed
Run Code Online (Sandbox Code Playgroud)
我经历了这个(http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/93a45026-0425-4d49-a4ac-1b882e90e6d5)并认为我得到了答案;
直到我在Microsoft Connect上看到这个(https://connect.microsoft.com/VisualStudio/feedback/details/565441/transactionscope-linq-to-sql?wa=wsignin1.0).
有人可以告诉我,我的代码是否实际在序列化隔离级别下执行,或者它是否只是在read committed下运行?
transactions sql-server-profiler isolation-level sql-server-2008 linq-to-sql
我正在使用JBoss EAP 4.3.
当我使用内置的JBoss TreeCache作为Hibernate的二级缓存时,我正在研究并发策略的不同选项.我已经设置好了,我已经通过查看日志验证了缓存是否正常工作,但我不确定实际使用的是什么并发策略以及它是如何工作的.
对于每一个实体,我可以设置下面的"用法"的价值观之一,在@Cache注释:NONE,READ_ONLY,NONSTRICT_READ_WRITE,READ_WRITE,TRANSACTIONAL.
在另一方面,在我的JBossTreeCache配置文件,我可以设置IsolationLevel为整个高速缓存执行下列操作之一:NONE,READ_UNCOMMITTED,READ_COMMITTED,REPEATABLE_READ,SERIALIZABLE(或者只是使用OPTIMISTIC).
在一次查看配置选项时,文档非常清楚,但我想知道当您组合不同选项时会发生什么.
例如,如果你设置@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)一个实体,但配置NONE为IsolationLevel为JBossTreecache,会发生什么?
我也相信,JBossTreeCache只有支持NONE,READ_ONLY以及TRANSACTIONAL使用情况,但什么IsolationLevel是你允许他们结合?如果您使用例如会发生什么NONSTRICT_READ_WRITE?
总而言之,这里应该有5x6种不同的组合,但并非所有组合都有意义.
anyoone可以帮我整理一下吗?
我编写了一个应用程序(在C ++中使用Qt),该应用程序将数据插入SQLite数据库。另一个应用程序从同一数据库读取数据,但是我注意到无法读取未提交的数据。我希望即使尚未提交数据也能够读取数据。
阅读SQLite文档后,我发现杂物read_uncommitted,据我所知应该是我所需要的。问题是,即使将其设置为true,也无法获得未提交的数据。
我试图运行执行插入过程的应用程序,同时启动sqlite3客户端。我将编译指示设置为true,然后尝试计算表中的记录。我得到的始终为0(在插入过程开始之前数据库为空),直到整个过程完成为止,我立即获得了所有数据。
难道我做错了什么?难道这不应该使sqlite3客户端的行为有所不同吗?
是否可以显示Sybase Adaptive Server Enterprise 12.5.4中设置的当前隔离配置?
如果是这样,那我怎么显示它?
我在WCF服务中使用Entity Framework 6.1并希望用READ UNCOMMITTED隔离级别包围我的SELECT查询,因为其他批量更新将插入到我正在阅读的表中,并且不希望锁定那些批量更新当在表上执行READ时.这基本上模拟了SELECT WITH NOLOCK.
此代码也以异步方式使用.因此,我不能简单地使用TransacactionScope.请注意,我也在使用.Net 4.5.1框架.
我可以将TransactionScope上的隔离级别设置为ReadUncommitted,但TransactionScopeOption的默认值为ReadCommitted.我没有看到任何改变隔离级别的方法.
有没有办法改变隔离级别?如果我无法设置隔离级别,我的查询是否可以在上述情况下运行.
实际上,如果我不能将隔离级别设置为"NOLOCK",则我甚至不需要包含TransactionScopeAsyncFlowOption.
wcf entity-framework asynchronous-wcf-call isolation-level c#-5.0
我想使用eclipse链接设置隔离级别,
我尝试了这两种方法:
java.sql.Connection中
mgr = EMF.get().createEntityManager();
tx = mgr.getTransaction();
tx.begin();
java.sql.Connection connection = mgr.unwrap(java.sql.Connection.class);
connection.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITTED);
System.out.println("Connection: "+connection.getTransactionIsolation());
//prints TRANSACTION_READ_COMMITED as expected
org.eclipse.persistence.sessions.DatabaseLogin databaseLogin = new DatabaseLogin();
System.out.println("DatabaseLoging: "+databaseLogin.getTransactionIsolation());
//prints -1, representing transaction isolation is not set
Run Code Online (Sandbox Code Playgroud)DatabaseLogin setTransationIsolation方法
mgr = EMF.get().createEntityManager();
tx = mgr.getTransaction();
tx.begin();
org.eclipse.persistence.sessions.DatabaseLogin databaseLogin = new DatabaseLogin();
databaseLogin.setTransactionIsolation(DatabaseLogin.TRANSACTION_READ_COMMITTED);
System.out.println("DatabaseLoging: "+databaseLogin.getTransactionIsolation());
//prints TRANSACTION_READ_COMMITED as expected
java.sql.Connection connection = mgr.unwrap(java.sql.Connection.class);
System.out.println("Connection: "+connection.getTransactionIsolation());
//prints TRANSACTION_REPEATABLE_READ
Run Code Online (Sandbox Code Playgroud)如您所见,getTransacationIsolation()方法的返回值之间存在一些不一致.我的问题是,在两种情况下都确实设置了哪种事务隔离?我知道默认情况下eclipse链接使用不同的连接进行读写操作,DatabaseLogin.setTransactionIsolation应该为两个连接设置隔离级别,那么为什么Connection.getTransactionIsolation仍然返回另一个隔离级别?
我正在使用应用程序范围的EntityManager,JPA 2.0,EclipseLink 2.5.2.
如果有更好的方法设置事务隔离,请告诉我.
我已经将隔离级别设置为IsolationLevel.ReadUncommitted是否可以仅提取未提交的数据?是否无需手动更改要调用的存储过程?
以下是仅用于提取未提交数据的脚本:
SELECT * FROM Users.[User]
EXCEPT
SELECT * FROM Users.[User] WITH (READCOMMITTED, READPAST)
Run Code Online (Sandbox Code Playgroud) isolation-level ×10
transactions ×4
biztalk ×1
c# ×1
c#-5.0 ×1
dapper ×1
database ×1
dbconnection ×1
eclipselink ×1
hibernate ×1
innodb ×1
jboss ×1
jboss-cache ×1
jpa ×1
linq-to-sql ×1
mysql ×1
php ×1
sql-server ×1
sqlite ×1
sybase-ase ×1
wcf ×1