Maison base de données tutoriel mysql DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2

DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2

Jun 07, 2016 pm 04:06 PM
db2 s 变量

本文主要解释下DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2_SKIPINSERTED的使用 实验环境: DB2 v9.7.0.6 AIX 6.1.0.0 采用默认的隔离级别CS STUDENT表的DDL与初始内容 CREATE TABLE E97Q6C .STUDENT ( AGE INTEGER , NAME CHAR(8) ) IN

本文主要解释下DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2_SKIPINSERTED的使用

实验环境:

DB2 v9.7.0.6
AIX 6.1.0.0
采用默认的隔离级别CS

STUDENT表的DDL与初始内容
CREATE TABLE "E97Q6C "."STUDENT" (
"AGE" INTEGER ,
"NAME" CHAR(8) )

IN "USERSPACE1" ;


$ db2 "select * from student"
AGE NAME
----------- --------
3 xu
5 gao
6 mu
6 mu
6 mu
4 three
1 an
7 record(s) selected.

--分割线--

当启用DB2_EVALUNCOMMITTED时,DB2可以对未提交的插入(INSERT)或更新(UPDATE)数据进行谓词判断。
如果未提交的数据不符合该条语句的谓词判断条件,DB2将不对未提交数据加锁,这样避免了因为要对
未提交数据加锁引起的锁等待状态,提高了应用程序访问的并发性。


实验 1
测试如下(该参数与数据库配置参数CUR_COMMIT有冲突,因此,测试之前需要先将CUR_COMMIT参数设为disabled.)
首先在session 1里做一条“未提交的插入(INSERT)操作”

session 1
---------
$ db2 +c "insert into student values(7,'he')"
DB20000I The SQL command completed successfully.

session 2
---------
$ db2 "select * from student"
SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "68". SQLSTATE=40001
$ db2 "select * from student where age = 3"
SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "68". SQLSTATE=40001

可以看到,在session 2里的两条语句都因锁超时而失败了。原因是如果用户在更改(UPDATE)、插入(INSERT)或
删除(DELETE)一行时,会在这一行加上排它锁,别的用户不能读、写,除非使用UR隔离级别。

现在启用DB2_EVALUNCOMMITTED变量,需要重启实例,之后在session 1里做同样的插入操作,session 2里做同样的查询
操作:

session 1

------------
$ db2set DB2_EVALUNCOMMITTED=ON
$ db2stop force
$ db2start

$ db2 connect to qsmiao
$ db2 +c "insert into student values(7,'he')"
DB20000I The SQL command completed successfully.

session 2
------------
$ db2 "select * from student"
SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "68". SQLSTATE=40001
$ db2 "select * from student where age = 3"
AGE NAME
----------- --------
3 xu
1 record(s) selected.

这次可以看到第2条查询语句是成功的,原因是session 1中有未提交的插入操作,session 2在扫描时,对该行进行了谓词判断,发现不符合谓词盼断条件
也就是 age = 3 , session 2就不会对该行进行加锁,因而不会导致锁超时。

DB2_SKIPDELETED变量被启用的效果是:在表访问期间,会无条件地跳过被删除的行。

实验 2:
在默认情况下,即没有设置DB2_EVALUNCOMMITTED和DB2_SKIPDELETED变量的时候,如果session 1用提交的方式删除操作的时候,Session 2若要查询整个表,是要超时的,
如下:
session 1
---------
$ db2set DB2_SKIPDELETED=OFF
$ db2set DB2_EVALUNCOMMITTED=OFF
$ db2stop force
$ db2start
$ db2 connect to qsmiao
$ db2 +c "delete from student where age=6"
DB20000I The SQL command completed successfully.


session 2
---------
$ db2 "select * from student"
SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "68". SQLSTATE=40001


如下,现在修改DB2_SKIPDELETED为ON,那么session 2查询的时候,会无条件地跳过被删除的行,因此会成功。
session 1
---------
$ db2 rollback
$ db2set DB2_SKIPDELETED=ON
$ db2stop force
$ db2start
$ db2 connect to qsmiao
$ db2 +c "delete from student where age=6"
DB20000I The SQL command completed successfully.


session 2
---------
$ db2 "select * from student"


AGE NAME
----------- --------
3 xu
5 gao
4 three
1 an


4 record(s) selected.


类似的,DB2_SKIPINSERTED变量的作用是无条件地跳过被插入的行,就像它们还没有被插入。


参考资料:
牛新庄 《高级进阶DB2(第2版)》

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un guide d'utilisation des variables d'environnement Windows 11 et 10 pour le profilage Un guide d'utilisation des variables d'environnement Windows 11 et 10 pour le profilage Nov 01, 2023 pm 08:13 PM

Les variables d'environnement sont le chemin d'accès à l'emplacement (ou à l'environnement) où les applications et les programmes s'exécutent. Ils peuvent être créés, édités, gérés ou supprimés par l'utilisateur et s'avèrent utiles lors de la gestion du comportement de certains processus. Voici comment créer un fichier de configuration pour gérer plusieurs variables simultanément sans avoir à les modifier individuellement sous Windows. Comment utiliser les profils dans les variables d'environnement Windows 11 et 10 Sous Windows, il existe deux ensembles de variables d'environnement : les variables utilisateur (s'appliquent à l'utilisateur actuel) et les variables système (s'appliquent globalement). Cependant, en utilisant un outil comme PowerToys, vous pouvez créer un fichier de configuration distinct pour ajouter des variables nouvelles et existantes et les gérer toutes en même temps. Voici comment procéder : Étape 1 : Installer PowerToysPowerTo

Mode strict pour les variables en PHP7 : comment réduire les bugs potentiels ? Mode strict pour les variables en PHP7 : comment réduire les bugs potentiels ? Oct 19, 2023 am 10:01 AM

Le mode strict a été introduit dans PHP7, ce qui peut aider les développeurs à réduire les erreurs potentielles. Cet article expliquera ce qu'est le mode strict et comment utiliser le mode strict en PHP7 pour réduire les erreurs. Parallèlement, l'application du mode strict sera démontrée à travers des exemples de code. 1. Qu’est-ce que le mode strict ? Le mode strict est une fonctionnalité de PHP7 qui peut aider les développeurs à écrire du code plus standardisé et à réduire certaines erreurs courantes. En mode strict, il y aura des restrictions et une détection strictes sur la déclaration des variables, la vérification du type, l'appel de fonction, etc. Passer

Que sont les variables d'instance en Java Que sont les variables d'instance en Java Feb 19, 2024 pm 07:55 PM

Les variables d'instance en Java font référence aux variables définies dans la classe, et non dans la méthode ou le constructeur. Les variables d'instance sont également appelées variables membres. Chaque instance d'une classe possède sa propre copie de la variable d'instance. Les variables d'instance sont initialisées lors de la création de l'objet et leur état est enregistré et conservé tout au long de la durée de vie de l'objet. Les définitions de variables d'instance sont généralement placées en haut de la classe et peuvent être déclarées avec n'importe quel modificateur d'accès, qui peut être public, privé, protégé ou le modificateur d'accès par défaut. Cela dépend de ce que nous voulons que ce soit

Introduction à la fonction PHP — is_string() : Vérifiez si la variable est une chaîne Introduction à la fonction PHP — is_string() : Vérifiez si la variable est une chaîne Jul 24, 2023 pm 09:33 PM

Introduction à la fonction PHP — strpos() : Vérifier si une variable est une chaîne En PHP, is_string() est une fonction très utile, qui est utilisée pour vérifier si une variable est une chaîne. Lorsque nous devons déterminer si une variable est une chaîne, la fonction is_string() peut nous aider à atteindre facilement cet objectif. Ci-dessous, nous apprendrons comment utiliser la fonction is_string() et fournirons quelques exemples de code associés. La syntaxe de la fonction is_string() est très simple. il suffit qu'il

Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Mar 09, 2024 pm 05:36 PM

L'utilisation d'Ajax pour obtenir des variables à partir de méthodes PHP est un scénario courant dans le développement Web. Grâce à Ajax, la page peut être obtenue dynamiquement sans actualiser les données. Dans cet article, nous présenterons comment utiliser Ajax pour obtenir des variables à partir de méthodes PHP et fournirons des exemples de code spécifiques. Tout d’abord, nous devons écrire un fichier PHP pour gérer la requête Ajax et renvoyer les variables requises. Voici un exemple de code pour un simple fichier PHP getData.php :

Carte mentale de la syntaxe Python : compréhension approfondie de la structure du code Carte mentale de la syntaxe Python : compréhension approfondie de la structure du code Feb 21, 2024 am 09:00 AM

Python est largement utilisé dans un large éventail de domaines grâce à sa syntaxe simple et facile à lire. Il est crucial de maîtriser la structure de base de la syntaxe Python, à la fois pour améliorer l’efficacité de la programmation et pour acquérir une compréhension approfondie du fonctionnement du code. À cette fin, cet article fournit une carte mentale complète détaillant divers aspects de la syntaxe Python. Variables et types de données Les variables sont des conteneurs utilisés pour stocker des données en Python. La carte mentale affiche les types de données Python courants, notamment les entiers, les nombres à virgule flottante, les chaînes, les valeurs booléennes et les listes. Chaque type de données a ses propres caractéristiques et méthodes de fonctionnement. Opérateurs Les opérateurs sont utilisés pour effectuer diverses opérations sur les types de données. La carte mentale couvre les différents types d'opérateurs en Python, tels que les opérateurs arithmétiques, ratio

Erreur interne : impossible de créer un répertoire temporaire [Résolu] Erreur interne : impossible de créer un répertoire temporaire [Résolu] Apr 17, 2023 pm 03:04 PM

Le système Windows permet aux utilisateurs d'installer différents types d'applications sur votre système à l'aide de fichiers exécutables/de configuration. Récemment, de nombreux utilisateurs de Windows ont commencé à se plaindre de recevoir une erreur nommée INTERNALERROR:cannotCreateTemporaryDirectory sur leurs systèmes lorsqu'ils essayaient d'installer une application à l'aide d'un fichier exécutable. Le problème ne se limite pas à cela mais empêche également les utilisateurs de lancer des applications existantes, également installées sur le système Windows. Certaines raisons possibles sont énumérées ci-dessous. Exécutez l'exécutable pour l'installer sans accorder les privilèges d'administrateur. Un chemin non valide ou différent a été fourni pour la variable TMP. système endommagé

Quelle est la différence entre la syntaxe DB2 et Oracle Quelle est la différence entre la syntaxe DB2 et Oracle Jul 05, 2023 am 10:39 AM

Différences de syntaxe entre db2 et oracle : 1. Différences de syntaxe SQL. Bien que db2 et oracle utilisent tous deux un langage de requête structuré, ils présentent certaines différences de syntaxe ; 2. db2 et oracle ont des types de données différents. être défini lors de la création de la table ou ajouté après l'utilisation de l'instruction "ALTER TABLE". Oracle doit être défini ensemble lors de la création de la table 4. Il existe également quelques différences dans la syntaxe des procédures et fonctions stockées db2 et Oracle.

See all articles