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的好主意,并审核更改以查看所需的内容。希望这有助于,伙计们!

 

 

 

 

dbakevlar.

http://about.me/dbakevlar

One thought on “SQLD360与AWR仓库

评论被关闭。