Oracle11g 为什么在单个表上使用这么多打开的游标进行SELECT查询?
我观察到Oracle 11g中的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
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;”