讲解DB2通用数据库并发性的重要性

作者:夏果果  来源:IT165收集  发布日期:2011-09-28 10:56:30

 

  超时

  当应用程序处于暂挂状态(见上面)超过了预设的一段时间间隔,那么就要终止该应用程序。该应用程序被称为已经超时。在终止该应用程序之前,会在 SQLCA 中收到一条合适的错误消息。SQLCA(SQL 通信域)是 SQL 应用程序预留的一块大小固定的存储区域,用于从 DB2 UDB 向程序传递条件代码和其他信息。

  某些操作,如 COMMIT 和 ROLLBACK,就不能超时。在下面的子标题 RESOURCE TIMEOUT 中,将对决定应用程序进程可以等待资源多长时间的预设时间间隔进行讨论。

  死锁

  当两个或更多应用程序每个都持有另一应用程序所需资源上的锁,没有这些资源,那些应用程序都无法继续完成其工作时,这时就会出现死锁的状况。

  以下是一个简单的死锁场景:

  应用程序 A 访问表 T,并请求页面 X 上的排他(非可共享的)锁。

  应用程序 B 访问表 T,并请求页面 Y 上的排他锁。

  然后,应用程序 A 请求页面 Y 上的锁,同时仍然持有页面 X 上的排他锁。应用程序 A 将被挂起,因为应用程序 B 具有页面 Y 上的排他锁。

  然后,应用程序 B 请求页面 X 上的锁,同时仍然持有页面 Y 上的排他锁。应用程序 B 将被挂起,因为应用程序 A 具有页面 X 上的排他锁。

  这是一种僵持情况。应用程序 A 和 B 都无法继续工作。

  在一段预设的时间间隔之后(请参阅标题 DEADLOCK TIME 下面的讨论),DB2 UDB 将终止当前工作单元,因为某个应用程序陷入死锁状态(通常为所做工作最少的应用程序)。这将释放终止程序所持有的锁,并允许剩余的应用程序继续下去。 DB2 UDB 将向被终止的应用程序的 SQLCA 发送描述性的错误消息和信息。

  实用程序和命令的并发机制

  当 SQL 应用程序使用事务锁来控制对 DB2 UDB 对象的并发访问时,DB2 UDB 实用程序和命令可以通过其他方法访问 DB2 UDB 对象,即 声明(claim)、放弃(drain)和 兼容性规则。

  声明是指通知 DB2 UDB 当前正在访问某个特定对象。提交之后,该声明通常不会继续存在。为了在下一工作单元里访问 DB2 UDB 对象,应用程序需要进行新的声明。声明通知 DB2 UDB 当前正关注某个 DB2 UDB 对象,或是该对象上存在活动。只要 DB2 UDB 对象上存在声明,在释放那些声明之前,就不能采取任何放弃(drain)。

  放弃(drain)是指通过下列方式来访问 DB2 UDB 对象的动作:

  阻止对对象进行任何新的声明。

  等待释放对象上现有的所有声明。

  DB2 UDB 对象上的放弃导致 DB2 UDB 停止(quiesce)所有当前正声明该资源的应用程序,其方式为允许它们到达提交点,但阻止它们(或任何其他的应用程序进程)进行新的声明。Drain 锁还阻止冲突进程同时放弃(drain)同一对象。

Tag标签: DB2   通用数据库   并发性  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规