zoukankan      html  css  js  c++  java
  • [20210521]11g shared pool latch与library cache mutex的简单探究4.txt

    [20210521]11g shared pool latch与library cache mutex的简单探究4.txt

    --//继续昨天的测试:
    http://blog.itpub.net/267265/viewspace-2773083/ =>[20210520]11g shared pool latch与library cache mutex的简单探究3.txt

    当时的总结:
    --//很明显前面3次出现都需要遇到这两个等待事件,
    --//第1次library cache: mutex X,再持有latch: shared pool
    --//第2,3次先持有latch: shared pool,然后才是library cache: mutex X.
    --//第4次没有需要latch: shared pool,library cache: mutex X。

    --//有点不好理解的地方是为什么第1次library cache: mutex X,再持有latch: shared pool,而后面的第2,3次先持有latch: shared
    --//pool,然后才是library cache: mutex X.

    --//会不会11g的sqlplus客户端改变什么导致的情况。因为11g下sqlplus执行后不会马上释放光标,会不会就是这个原因导致出现这样的
    --//情况。

    1.环境:
    SCOTT@book> @ ver1
    PORT_STRING                    VERSION        BANNER
    ------------------------------ -------------- --------------------------------------------------------------------------------
    x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

    2.测试:
    SCOTT@book> @ s
    SCOTT@book(295,5)> @ spid
           SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
    ---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
           295          5 15988                    DEDICATED 15989       21          3 alter system kill session '295,5' immediate;

    $ cat latch_mutex.gdb
    break kslgetl if $rdi==0X6010D860
      commands
        silent
        printf "kslgetl %x, %d, %d, %d ", $rdi, $rsi, $rdx, $rcx
        c
      end

    break kglGetMutex if $rsi==0X80528f40
      commands
        silent
        printf "kglGetMutex %x, %x, %x, %d ", $rdi, $rsi, $rdx, $rcx
        c
      end

    --//执行如下命令多次,避免一些递归。
    --//desc dept;
    --//Select * from dept where deptno=20;
    --//select sysdate from dual;

    --//session 1,第1次执行:
    SCOTT@book(295,5)> select * from dept where deptno=20;
        DEPTNO DNAME          LOC
    ---------- -------------- -------------
            20 RESEARCH       DALLAS

    $ gdb -p 15989 -x latch_mutex.gdb
    ...
    (gdb) c
    Continuing.
    kglGetMutex c0cc9e0, 80528f40, 7d4f8a18, 1
    kslgetl 6010d860, 1, 0, 3980

    --//session 1,顺便执行其它语句,比如:
    select sysdate from dual;
    --//因为这条语句已经在测试前执行多次,光标已经缓存。后面测试按照这样的方式执行,也就是执行顺序是:
    select * from dept where deptno=20;
    select sysdate from dual;
    --//循环往复,不再说明:

    --//session 1,第2次执行前执行:
    SCOTT@book(44,11)> select sysdate from dual ;
    SYSDATE
    -------------------
    2021-05-21 09:39:35

    --//gdb界面会出现:
    kslgetl 6010d860, 1, 2097785048, 3991

    --//按照道理应该不会有输出,因为上面的语句光标已经缓存,可以推测这个就是前面的语句select * from dept where deptno=20;导致的情况。

    --//session 1,第2次执行:
    kglGetMutex c0cc9e0, 80528f40, 7d4f8a18, 1
    kslgetl 6010d860, 1, 0, 4039
    kslgetl 6010d860, 1, 0, 3980
    kslgetl 6010d860, 1, 0, 4039

    --//session 1,第3次执行前执行:
    SCOTT@book(44,11)> select sysdate from dual ;
    SYSDATE
    -------------------
    2021-05-21 09:42:25

    --//gdb界面再次出现:
    kslgetl 6010d860, 1, 2097785048, 3991

    --//session 1,第3次执行:
    kglGetMutex c0cc9e0, 80528f40, 7d4f8a18, 1

    --//session 1,第3次执行前执行:
    SCOTT@book(44,11)> select sysdate from dual ;
    SYSDATE
    -------------------
    2021-05-21 09:43:51
    --//gdb界面,这次没有输出,也就是一旦sql语句缓存,不再出现调用kslgetl的情况。

    --//session 1,第4次执行:

    --//没有任何输出。
    --//我反复测试多次,都是这样的情况。

  • 相关阅读:
    错误
    分页查询
    异步请求jquery
    深入理解C/C++ [Deep C (and C++)]
    C语言经典算法100例(三)
    《Python》 计算机基础
    Python程序员的进化史
    以前没有写笔记的习惯,现在慢慢的发现及时总结是多么的重要。 这一篇文章主要关于java多线程一些常见的疑惑点。因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,嘻嘻嘻、大家可以去参考一些那些书籍。我这个文章主要关于实际的一些问题。同时也算是我以后复习的资料吧,。还请大家多多指教。 同时希望多结交一些技术上的朋友。谢谢。
    快速读入函数
    一元二次方程公式
  • 原文地址:https://www.cnblogs.com/lfree/p/14792565.html
Copyright © 2011-2022 走看看