Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g 为什么在单个表上使用这么多打开的游标进行SELECT查询?_Oracle11g_Cursor - Fatal编程技术网

Oracle11g 为什么在单个表上使用这么多打开的游标进行SELECT查询?

Oracle11g 为什么在单个表上使用这么多打开的游标进行SELECT查询?,oracle11g,cursor,Oracle11g,Cursor,我观察到Oracle 11g中的SELECT语句具有大量打开的游标。比如说, SELECT statement USING 112 OPEN cursors: SELECT NVL(MAX(TO_NUMBER(pmd_mdoc_no)),0)+1 FROM t_pm_mdoc; SELECT PWC_WERKS,PWC_ARBPL FROM T_PM_WK_CTR WHERE PWC_WERKS='077' AND PWC_ARBPL='PPMECDGS'; 表T_PM_MDOC有50

我观察到Oracle 11g中的
SELECT
语句具有大量打开的游标。比如说,


  • SELECT statement USING 112 OPEN cursors:
    SELECT NVL(MAX(TO_NUMBER(pmd_mdoc_no)),0)+1 FROM t_pm_mdoc;
    
    SELECT PWC_WERKS,PWC_ARBPL 
    FROM T_PM_WK_CTR WHERE PWC_WERKS='077' 
    AND PWC_ARBPL='PPMECDGS';
    
    表T_PM_MDOC有500万条记录


  • SELECT statement USING 112 OPEN cursors:
    SELECT NVL(MAX(TO_NUMBER(pmd_mdoc_no)),0)+1 FROM t_pm_mdoc;
    
    SELECT PWC_WERKS,PWC_ARBPL 
    FROM T_PM_WK_CTR WHERE PWC_WERKS='077' 
    AND PWC_ARBPL='PPMECDGS';
    
    表t_pm_wk_ctr有1553条记录


  • 为什么在一个表上的
    SELECT
    查询中使用了这么多隐式游标?

    第二个查询使用了多少游标?您正在运行什么查询来获得数字112?你的标题谈论“隐式游标”,你的身体谈论“开放游标”。这些是非常不同的事情。在不了解查询的情况下,很难知道您是在测量实际打开的游标还是缓存的游标或其他内容。很可能您担心的是,当您只运行一个SELECT时,会话中为什么会有这么多打开的游标,答案是Oracle会做很多“隐式选择”来解析您的语句(检查表是否存在,列是否存在,检查您是否有权访问该表/列,以及其他一些用于生成执行计划的“选择”等等)除此之外,Oracle还在会话创建过程中执行许多“选择”来检查您的凭据。其中一些游标保持“打开”直到会话结束。@Tim Biegeleisen,第二个查询使用16 opencursor@JustinCave,查询是:“从v$OPEN\u cursor中选择sid、sql\u id、USER\u NAME、COUNT()作为“OPEN CURSORS”,其中USER\u NAME='PMSUSR'按sid分组、sql\u id、USER\u NAME按COUNT排序()DESC;”第二个查询使用了多少个游标?您正在运行什么查询来给出数字112?您的标题谈到“隐式游标”,您的正文谈到“开放游标”。这些是非常不同的事情。在不知道您的查询的情况下,很难知道您测量的是实际打开的游标还是缓存的游标或其他。很可能您担心的是,当您只运行一个SELECT时,会话中为什么会有这么多打开的游标,答案是Oracle会执行很多“隐式选择”为了解析您的语句(检查表是否存在,检查列是否存在,检查您是否有权访问该表/列,以及其他一些用于构建执行计划的“选择”等等),除此之外,Oracle还在会话创建期间执行大量“选择”来检查您的凭据。其中一些游标保持“打开”直到会话结束。@Tim Biegeleisen,第二个查询使用16 opencursor@JustinCave,查询是:“从v$OPEN\u cursor中选择sid、sql\u id、USER\u NAME、COUNT()作为“OPEN CURSORS”,其中USER\u NAME='PMSUSR'按sid分组、sql\u id、USER\u NAME按COUNT排序()DESC;”