SQLD360与AWR仓库
Mauro决定给我另一个挑战 - 在AWR仓库中运行SQLD360,让他知道它是如何直接的“out of the box”. Â It’S比SQLTXPLAIN更简单的安装过程,您只需解压缩并运行,(无需安装任何包…)
我从加载的一个源数据库中选择了一个SQL_ID,并在31天历史记录中运行它:
SQL> @sqld360.sql 8ymbm9h6ndphq T 31
我看到一些错误滚动在屏幕上作为收集数据的进程并将其拉动ran。
有没有人’要在成功运行时查看相同的日志文件以查看参数,但SQL非常直向前且右侧在SQL目录中,这么容易看到DBID填充的位置作为SQLD360_0B_PRE.SQL的一部分:
-- get dbid COL sqld360_dbid NEW_V sqld360_dbid; SELECT TRIM(TO_CHAR(dbid)) sqld360_dbid FROM v$database;
因为这是从V $对象中拉出的’s为AWR仓库填充不正确,这需要查询AWR,最好是此信息的DBA_HIST_DATABASE_INSTACE。
SQL> desc dba_hist_database_instance; Name Null? Type ----------------------------------------- -------- -------------- DBID NOT NULL NUMBER INSTANCE_NUMBER NOT NULL NUMBER STARTUP_TIME NOT NULL TIMESTAMP(3) PARALLEL NOT NULL VARCHAR2(3) VERSION NOT NULL VARCHAR2(17) DB_NAME VARCHAR2(9) INSTANCE_NAME VARCHAR2(16) HOST_NAME VARCHAR2(64) LAST_ASH_SAMPLE_ID NOT NULL NUMBER PLATFORM_NAME VARCHAR2(101) CON_ID NUMBER
然后,预运行脚本还查询SQL_ID的Plan_Table:
-- check if SQLD360 is getting called by EDB360 COL from_edb360 NEW_V from_edb360; SELECT CASE WHEN count(*) > 0 THEN '--' END from_edb360 FROM plan_table WHERE statement_id = 'SQLD360_SQLID' -- SQL IDs list flag AND operation = '&&sqld360_sqlid.' AND rownum = 1;
如果我们想要此数据,我们需要它会调用dba_hist_plan_table,但它确实有一个标志,这样它就可以随时随地运行,所以它’不是游戏塞子。
然后,当它查找实例编号时,我们会再次跳转:
-- get instance number COL connect_instance_number NEW_V connect_instance_number; SELECT TO_CHAR(instance_number) connect_instance_number FROM v$instance;
同样,使用AWR仓库,我们需要在DBName的Where子句中添加后调用dba_hist_database_instance视图。
SELECT TO_CHAR(instance_number) from dba_hist_database_instance where db_name=p_dbname;
与SQLTexplain一样,我们在get_sdatabase_name_short,get_host_name和get_rdbms_version上拍摄:
-- get database name (up to 10, stop before first '.', no special characters) COL database_name_short NEW_V database_name_short FOR A10; SELECT LOWER(SUBSTR(SYS_CONTEXT('USERENV', 'DB_NAME'), 1, 10)) database_name_short FROM DUAL; SELECT SUBSTR('&&database_name_short.', 1, INSTR('&&database_name_short..', '.') - 1) database_name_short FROM DUAL; SELECT TRANSLATE('&&database_name_short.', 'abcdefghijklmnopqrstuvwxyz0123456789-_ ''`[email protected]#$%&*()=+[]{}\|;:",.<>/?'||CHR(0)||CHR(9)||CHR(10)||CHR(13)||CHR(38), 'abcdefghijklmnopqrstuvwxyz0123456789-_') database_name_short FROM DUAL;
-- get host name (up to 30, stop before first '.', no special characters) COL host_name_short NEW_V host_name_short FOR A30; SELECT LOWER(SUBSTR(SYS_CONTEXT('USERENV', 'SERVER_HOST'), 1, 30)) host_name_short FROM DUAL; SELECT SUBSTR('&&host_name_short.', 1, INSTR('&&host_name_short..', '.') - 1) host_name_short FROM DUAL; SELECT TRANSLATE('&&host_name_short.', 'abcdefghijklmnopqrstuvwxyz0123456789-_ ''`[email protected]#$%&*()=+[]{}\|;:",.<>/?'||CHR(0)||CHR(9)||CHR(10)||CHR(13)||CHR(38), 'abcdefghijklmnopqrstuvwxyz0123456789-_') host_name_short FROM DUAL;
-- get rdbms version COL db_version NEW_V db_version; SELECT version db_version FROM v$instance; DEF skip_10g = ''; COL skip_10g NEW_V skip_10g; SELECT '--' skip_10g FROM v$instance WHERE version LIKE '10%'; DEF skip_11r1 = ''; COL skip_11r1 NEW_V skip_11r1;
您可以了解所有这些都将如何返回AWR仓库存储库的信息(实际数据库’运行ON)而不是SQL_ID来自的源数据库。
CPU和RAC信息
当它进入CPU的信息和RAC时,我们有同样的问题 -
-- get average number of CPUs COL avg_cpu_count NEW_V avg_cpu_count FOR A3; SELECT ROUND(AVG(TO_NUMBER(value))) avg_cpu_count FROM gv$system_parameter2 WHERE name = 'cpu_count';
-- get total number of CPUs COL sum_cpu_count NEW_V sum_cpu_count FOR A3; SELECT SUM(TO_NUMBER(value)) sum_cpu_count FROM gv$system_parameter2 WHERE name = 'cpu_count';
-- determine if rac or single instance (null means rac) COL is_single_instance NEW_V is_single_instance FOR A1; SELECT CASE COUNT(*) WHEN 1 THEN 'Y' END is_single_instance FROM gv$instance;
前两个查询只需更新即可使用
WRI $ _dbu_cpu_usage.
cpu_count.
WRI $ _dbu_cpu_usage.
cpu_core_count.
并且可以轻松更新最后一个,以便在db_name传递后使用dba_hist_database_instance。
什么使SQLD360很棒,就是在快速检查时,改变了“pre”传递的脚本是db_id并查询dba_hist与v $ / gv $视图是所有真正需要的符合SQLD360 AWR仓库所必需的。
SQLD360获胜
如果没有任何更改 - 就像是,产品运行并只需在统计数据,环境和此类时提供一些错误的信息。 Â实际的SQL是可行的,代码忽略了AWR对象时的dbid。它将失败在灰烬上,但这是一个应该的东西’预计,除非他们想要在某个时候击中dba_hist_active_session_history… 🙂
感谢Mauro为The AWR Warehouse尝试SQLD360的好主意,并审核更改以查看所需的内容。希望这有助于,伙计们!
Pingback: - Oracle - Oracle - Toad World