يمكنك العثور على SQL_ID لاستعلام Oracle Analytics

عند ضبط الاستعلامات فيOracle Analytics، اطلع على نموذج البيانات وتصميم التقرير وتصميم لوحة المعلومات وتكوين الشبكة وأحيانًا تحتاج إلى التحقيق في قاعدة البيانات.

جدول V$SQL

بالنسبة لتحقيقات قاعدة البيانات، يجب أن تعرف SQL_ID لجملة SQL تتمكن من تتبع استعلام معين عبر محفوظات الجلسات النشطة (ASH)، ومستودع حمل العمل التلقائي (AWR)، وOracle SQLTXPLAIN (SQLT).

يعرض هذا الموضوع كيفية العثور على SQL_ID باستخراج بيانات جداول تتبع استخدام Oracle Analytics وجدول نظام قاعدة بيانات Oracle database بالاسم V$SQL (or GV$SQL لقاعدة بيانات RAC).

جدول V$SQL هو جدول نظام قاعدة بيانات Oracle يتتبع إحصائيات استعلامات SQL الفردية. يوجد صف واحد في الجدول لكل جملةSQL تقوم بتشغيلها، ويتم تعريف كل صف بواسطة عمود SQL_ID . يمكنك استخدام SQL_ID لتتبع جملة SQL عبر قاعدة بيانات Oracle.

ستجد الكثير من المعلومات المفيدة حول استعلاماتك في جدول V$SQL (أو GV$SQL لقاعدة بيانات RAC).

جداول تتبع الاستخدام

لا تتبع جداول تتبع الاستخدام مباشرة SQL_ID كن يمكن بسهولة تتبع SQL_ID عائدًا إلى جدول V$SQL (أو GV$SQL لقاعدة بيانات RAC).

عند تمكين تتبع الاستخدام في Oracle Analytics، يتم تتبع كل الاستعلامات في جدولين:

  • S_NQ_ACCT: يحتوي على الاستعلامات المنطقية
  • S_NQ_DB_ACCT: يحتوي على الاستعلامات الفعلية

يتم تسجيل الاستعلام المنطقي في جدول الاستعلامات المنطقية والاستعلام الفعلي (أو الاستعلامات الناتجة عن الاستعلام المنطقي) يتم تسجيله في جدول الاستعلام الفعلي.

يمكنك ربط الجداول الفعلية والمنطقية في عمود معرف الاستعلام المنطقي. عمود معرف الاستعلام المنطقي في الجدول المنطقي هو المعرف وفي الجدول الفعلي يكون LOGICAL_QUERY_ID.

مفتاح العثور على SQL_ID هو عمود PHYSICAL_HASH_ID في الجدول الفعلي. تتم كتابة قيمة PHYSICAL_HASH_ID أيضًا في جدول V$SQL (أو جدول GV$SQL) في عمود ACTION.

يحسب Oracle BI Server شفرة هاش من نص استعلام SQL المنطقي ونص استعلامات SQL المنطقية. يتم تسجيل شفرة هاش SQL الفعلية، لأي استعلاماتSQL تم تشغيلها من Oracle BI Server، في عمود ACTION في الجدولV$SQL. لمعرفة المزيد من المعلومات، يرجى الاطلاع على ربط السجل S_NQ_ACCT بسجل استعلامات BI.

لمزيد من المعلومات حول أعمدة تتبع الاستخدام المتعددة، يرجى الاطلاع على تتبع الاستخدام واستيعاب جداول تتبع الاستخدام.

الإعداد

الآن تعرف أين تجد PHYSICAL_HASH_ID، ويمكنك كتابة جملة SQL ترتبط باستعلام SQL الذي يعمل في قاعدة البيانات بتحليل معين في يعمل في Oracle Analytics.

عندما تكون جداول تتبع الاستخدام في مثيلات قاعدة البيانات نفسها مثل مستودع البيانات، يمكنك كتابة استعلام واحد للعثور على SQL_ID.

إذا كانت جداول تتبع الاستخدام ومستودع بياناتك في مثيلات قاعدة بيانات Oracle مختلفة، فستحتاج إلى تشغيل استعلامين. أولاً، قم بتشغيل استعلام لسحب PHYSICAL_HASH_ID للاستعلام الذي تريد التحقيق به من جداول تتبع الاستخدام. ثانيًا، اسحب SQL_ID من جدول V$SQL باستخدام قيمة PHYSICAL_HASH_ID لترشيح عمود ACTION.

المثال 1

في هذا المثال، نفترض أن جداول تتبع الاستخدام ومستودع البيانات في موقع مشترك. يمكن استخدام أي من الأعمدة من تتبع الاستخدام أو كلها وجداول V$SQL في الاستعلام لكن في هذا المثال، تحدد المجموعة الفرعية التالية:

select

o.sql_id,

to_char(l.start_ts, 'YYYY-MM-DD HH24:MI:SS'),

l.id as l_id,

p.logical_query_id,

l.hash_id,

l.saw_src_path,

l.query_src_cd,

l.success_flg,

l.num_db_query,

l.query_text,

p.query_text,

o.sql_text,

p.physical_hash_id,

o.action

from

usage_tracking.s_nq_acct l,

usage_tracking.s_nq_db_acct p,

v$sql o

where

l.id = p.logical_query_id and o.action = p.physical_hash_id and l.start_dt > trunc(sysdate - 1) and l.end_dt < trunc(sysdate)

order by l.start_ts, l.id, l.hash_id, p.physical_hash_id, o.sql_id;

المثال 2

في هذا المثال، نفترض أن جداول تتبع الاستخدام ومستودع البيانات في قواعد بيانات Oracle مختلفة.

أولاً، قم بكتابة استعلام مقابل جداول تتبع الاستعلام PHYSICAL_HASH_ID:

select

to_char(l.start_ts, 'YYYY-MM-DD HH24:MI:SS'),

l.id as l_id,

p.logical_query_id,

l.hash_id,

l.saw_src_path,

l.query_src_cd,

l.success_flg,

l.num_db_query,

l.query_text,

p.query_text,

p.physical_hash_id

from

usage_tracking.s_nq_acct l,

usage_tracking.s_nq_db_acct p

where

l.id = p.logical_query_id and l.start_dt > trunc(sysdate - 1) and l.end_dt < trunc(sysdate)

order by l.start_ts, l.id,l.hash_id, p.physical_hash_id;

بعد ذلك، اكتب استعلامًا مقابل V$SQL للحصول على SQL_ID، باستخدام قيم PHYSICAL_HASH_ID كمرشح:

select

o.action,

o.sql_id,

o.sql_text

from

v$sql o

where

o.action = ‘<physical_hash_id>’

order by o.sql_id;

إذا كانت لديك قاعدة بياناتRAC، بدلاً من جدول V$SQL، يمكنك استخدام جدول GV$SQL للحصول على SQL_ID:

select

o.action,

o.sql_id,

o.sql_text

from

gv$sql o

where

o.action = '<physical_hash_id>'

order by o.sql_id;

لا يعمل هذا الأسلوب إذا كنت تكتشف أخطاء كتل التهيئة وتصلحها لأن جدول تتبع استخدام كتل التهيئة (S_NQ_INITBLOCK) لا يحتوي على معرف شفرة هاش فعلية.

المثال 3

في هذا المثال، أنت تستخدم منطقة موضوعات "A - المبيعات العينة" وتحدد أعمدة قليلة فقط من جداول تتبع الاستخدام.

من "A - المبيعات العينة"، قم بتشغيل الاستعلام التالي:

[2022-02-04T15:11:17.629+00:00] [OBIS] [TRACE:2] [USER-0] [] [ecid: e49b96a8-33c4-4ba7-a877-e564d207eca1-00242531,0:1:38:3] [sik: bootstrap] [tid: dd1bc700] [messageId: USER-0] [requestid: 33e30020] [sessionid: 33e30000] [username: oacadmin] ############################################## [[

-------------------- SQL Request, logical request hash:

cee7ec94

SET VARIABLE QUERY_SRC_CD='Report';SELECT

   0 s_0,

   "A - Sample Sales"."Offices"."D1  Office" s_1,

   "A - Sample Sales"."Base Facts"."10- Variable Costs" s_2,

   "A - Sample Sales"."Base Facts"."11- Fixed Costs" s_3

FROM "A - Sample Sales"

ORDER BY 2 ASC NULLS LAST

FETCH FIRST 125001 ROWS ONLY

]]

عند تحديد start_ts، وid، وhash_id، وquery_src_cd، وquery_text من الجدول الفعلي لتتبع الاستخدام الذي تحصل عليه من قيمة ID وهي E841EBB79217270A660CDD3EFB5D986C.

فيما يلي وصف GUID-5FA7BA53-6767-4839-9341-A6AC0AACDFEB-default.jpg
.jpg

بعد ذلك، حدد logical_query_id، وhash_id، وphysical_hash_id، وquery_text من الجدول الفعلي لتتبع الاستخدام حيث يكون LOGICAL_QUERY_ID هو E841EBB79217270A660CDD3EFB5D986C.

فيما يلي وصف GUID-6842B138-0FD5-4DA9-A092-B423EB7459C2-default.jpg
.jpg

عند النظر في سجل إدارة الجلسات، ينتج الاستعلام المنطقي تعليمة SQL برمجية في عمود QUERY_TEXT:

[2022-02-04T15:11:17.637+00:00] [OBIS] [TRACE:2] [USER-18] [] [ecid: e49b96a8-33c4-4ba7-a877-e564d207eca1-00242531,0:1:38:5] [sik: bootstrap] [tid: dd1bc700] [messageId: USER-18] [requestid: 33e30020] [sessionid: 33e30000] [username: oacadmin] -------------------- Sending query to database named 01 - Sample App Data (ORCL) (id: <<62275>>), client type Oracle Call Interface (OCI), connection pool named Sample Relational Connection, logical request hash cee7ec94, physical request hash bd6708b8: [[

WITH

SAWITH0 AS (select sum(T5398.Cost_Fixed) as c1,

     sum(T5398.Cost_Variable) as c2,

     T5257.Office_Dsc as c3,

     T5257.Office_Key as c4

from

     BISAMPLE.SAMP_OFFICES_D T5257 /* D30 Offices */ ,

     BISAMPLE.SAMP_REVENUE_F T5398 /* F10 Billed Rev */

where  ( T5257.Office_Key = T5398.Office_Key )

group by T5257.Office_Dsc, T5257.Office_Key),

SAWITH1 AS (select 0 as c1,

     D1.c3 as c2,

     D1.c2 as c3,

     D1.c1 as c4,

     D1.c4 as c5

from

     SAWITH0 D1)

select D1.c1 as c1, D1.c2 as c2, D1.c3 as c3, D1.c4 as c4 from ( select D1.c1 as c1,

     D1.c2 as c2,

     D1.c3 as c3,

     D1.c4 as c4

from

     SAWITH1 D1

order by c2 ) D1 where rownum <= 125001

]]

أخيرًا، حدد action، وsql_id، وsql_text من جدول V$SQL حيث الإجراء هو bd6708b8.

فيما يلي وصف GUID-094521FA-317B-430D-9644-3C3E44D91900-default.jpg
.jpg

الاستعلام في عمود sql_text هو تعليمة SQL البرمجية نفسها الموجودة في الجدول الفعلي لتتبع الاستخدام. من هذا، يمكنك رؤية أن sql_id للاستعلام في السؤال هو 1gxhc0acmztwk.

إذا قمت بتشغيل الاستعلام نفسه مرة أخرى، تتم إضافة صف آخر للجدول المنطقي لتتبع الاستخدام بمعرف جديد لكن hash_id هو نفسه.

فيما يلي وصف GUID-82CD3499-E550-4DD4-8C96-E3DB3CE3232E-default.jpg
.jpg

وهكذا، تتم إضافة صف آخر إلى الجدول الفعلي لتتبع الاستخدام مع logical_query_idجديد، لكن يظل كل من hash_id وphysical_hash_id نفسيهما.

فيما يلي وصف GUID-BF05E975-45FB-4F40-9AE4-9E40A1124F35-default.jpg
.jpg

المثال 4

تتم أيضًا إعادة استخدام physical_hash_id عند تشغيل استعلام منطقي مشابه مقابل منطقة قائمة على النماذج الفعلية والمنطقية نفسها. على سبيل المثال، إذا قمت بتشغيل استعلام مماثل مقابل C - التكاليف العينة:

[2022-02-04T16:10:17.862+00:00] [OBIS] [TRACE:2] [USER-0] [] [ecid: e49b96a8-33c4-4ba7-a877-e564d207eca1-00242ce7,0:1:15:3] [sik: bootstrap] [tid: 58504700] [messageId: USER-0] [requestid: 13c9003c] [sessionid: 13c90000] [username: oacadmin] ############################################## [[

-------------------- SQL Request, logical request hash:

7b5ea9b1

SET VARIABLE QUERY_SRC_CD='Report';SELECT

   0 s_0,

   "C - Sample Costs"."Offices"."D1  Office" s_1,

   "C - Sample Costs"."Base Facts"."10- Variable Costs" s_2,

   "C - Sample Costs"."Base Facts"."11- Fixed Costs" s_3

FROM "C - Sample Costs"

ORDER BY 2 ASC NULLS LAST

FETCH FIRST 125001 ROWS ONLY

]]

ينتج هذا الاستعلام المنطقي SQL نفسه الموجود في الاستعلام الذي قمت بتشغيله مقابل A – المبيعات العينة:

[2022-02-04T16:10:17.866+00:00] [OBIS] [TRACE:2] [USER-18] [] [ecid: e49b96a8-33c4-4ba7-a877-e564d207eca1-00242ce7,0:1:15:5] [sik: bootstrap] [tid: 58504700] [messageId: USER-18] [requestid: 13c9003c] [sessionid: 13c90000] [username: oacadmin] -------------------- Sending query to database named 01 - Sample App Data (ORCL) (id: <<52912>>), client type Oracle Call Interface (OCI), connection pool named Sample Relational Connection, logical request hash 7b5ea9b1, physical request hash bd6708b8: [[

WITH

SAWITH0 AS (select sum(T5398.Cost_Fixed) as c1,

     sum(T5398.Cost_Variable) as c2,

     T5257.Office_Dsc as c3,

     T5257.Office_Key as c4

from

     BISAMPLE.SAMP_OFFICES_D T5257 /* D30 Offices */ ,

     BISAMPLE.SAMP_REVENUE_F T5398 /* F10 Billed Rev */

where  ( T5257.Office_Key = T5398.Office_Key )

group by T5257.Office_Dsc, T5257.Office_Key),

SAWITH1 AS (select 0 as c1,

     D1.c3 as c2,

     D1.c2 as c3,

     D1.c1 as c4,

     D1.c4 as c5

from

     SAWITH0 D1)

select D1.c1 as c1, D1.c2 as c2, D1.c3 as c3, D1.c4 as c4 from ( select D1.c1 as c1,

     D1.c2 as c2,

     D1.c3 as c3,

     D1.c4 as c4

from

     SAWITH1 D1

order by c2 ) D1 where rownum <= 125001

]]

أولاً، استخدم الجدول المنطقي لتتبع الاستخدام للعثور على المعرف. يمكنك رؤية أن hash_id يختلف عن الاستعلام الذي تم تشغيله مقابل A – المبيعات العينة.

فيما يلي وصف GUID-16D78632-88BA-446F-A6D7-496DA5662869-default.jpg
.jpg

في الجدول الفعلي لتتبع الاستخدام، ترى أنه حتى بالرغم من أن hash_id مختلف، فإن physical_hash_id هو نفسه.

فيما يلي وصف GUID-91049191-7E76-407D-B15B-A74160942148-default.jpg
.jpg

المثال 5

في هذا المثال، تقوم بتشغيل الاستعلامات نفسها لكن هذه المرة تنقر على Refresh. لاحظ أن المتغير OBIS_REFRESH_CACHE=1 يشير إلى التجديد. كما هو متوقع، يتم إدراج صف آخر في الجدول المنطقي لتتبع الاستخدام لكن له logical hash_id مختلف​.

فيما يلي وصف GUID-BFA0DEA8-423A-414C-8BC9-E1B8EA382689-default.jpg
.jpg

لكن، عند الاستعلام على الجدول الفعلي لتتبع الاستخدام، يمكنك رؤية أن كل الاستعلامات لها physical_hash_id. نفسه

فيما يلي وصف GUID-D6CC7144-9177-4CDA-B57A-1A4E4A6615A5-default.jpg
.jpg

لأن هذه الاستعلامات المنطقية الأربعة لها physical_hash_id نفسه، لن ترى إلا سجلاً واحدًا في جدول V$SQL لهذا الاستعلام.

فيما يلي وصف GUID-13AE24EE-9C17-48D9-976F-49FF882A5E42-default.jpg
.jpg

المثال 6

يمكنك استخدام الأسلوب نفسه لاكتشاف أخطاء استعلامات التمثيل المرئي للبيانات بناءً على منطقة (RPD) أو اتصال قاعدة بيانات. لاتصالات قاعدة البيانات، يتضمن هذا كل من التمثيلات المرئية للبيانات والاستعلامات المستخدمة لملء مجموعات البيانات.

يمكنك تحديد نوع الاستعلام، أي، تمثيل مرئي للبيانات، ومجموعة بيانات، وتحليل، وODBC، وغيرها، من قيمة العمود QUERY_SRC_CD. على سبيل المثال، استعلامات تمثيل البيانات بالقيمة Visual Analyzer، يكون للاستعلام المستخدم لملء قاعدة البيانات القيمةdata-prep، والتحليلات بالقيمة Report، والاستعلامات باستدعاءات إجراء ODBC الداخلي نفسها بالقيمة Soap.

لتكوين جملة SQL لتمثيل بيانات، يجب تغيير وصول البيانات إلى مباشر لمجموعة البيانات الأساسية.

في هذا المثال، تقوم بتكوين استعلام تمثيل مرئي للبيانات (مشابه للاستعلامات السابقة) مقابل مجموعة بيانات قائمة على اتصال بقاعدة بيانات Oracle:

[2022-02-03T19:42:06.564+00:00] [OBIS] [TRACE:2] [USER-0] [] [ecid: f95b5f1b-1e5c-4604-b82a-3eb3717f3aa6-002aa26e,0:1:1:3] [sik: bootstrap] [tid: 58b0a700] [messageId: USER-0] [requestid: ed830023] [sessionid: ed830000] [username: oacadmin] ############################################## [[

-------------------- SQL Request, logical request hash:

3158b05

SET VARIABLE QUERY_SRC_CD='Visual Analyzer',SAW_SRC_PATH='{"viewID":"view!1","currentCanvas":"canvas!1"}',ENABLE_DIMENSIONALITY = 1; SELECT

   0 s_0,

   XSA('oacadmin'.'BISAMPLE_OfficeRevenue')."SAMP_OFFICES_D"."OFFICE_DSC" s_1,

   XSA('oacadmin'.'BISAMPLE_OfficeRevenue')."SAMP_REVENUE_F"."COST_FIXED" s_2,

   XSA('oacadmin'.'BISAMPLE_OfficeRevenue')."SAMP_REVENUE_F"."COST_VARIABLE" s_3

FROM XSA('oacadmin'.'BISAMPLE_OfficeRevenue')

ORDER BY 2 ASC NULLS LAST

FETCH FIRST 125001 ROWS ONLY

/* AdditionalDetail='VisualAnalyzer' */

مما ينتج تعليمة SQL البرمجية التالية:

[2022-02-03T19:42:06.960+00:00] [OBIS] [TRACE:2] [USER-18] [] [ecid: f95b5f1b-1e5c-4604-b82a-3eb3717f3aa6-002aa26e,0:1:1:5] [sik: bootstrap] [tid: 58b0a700] [messageId: USER-18] [requestid: ed830023] [sessionid: ed830000] [username: oacadmin] -------------------- Sending query to database named 'oacadmin'.'BISAMPLE' (id: <<147945>>), client type OCI 10g/11g, connection pool named 'oacadmin'.'BISAMPLE', logical request hash 3158b05, physical request hash c48e8741: [[

WITH

SAWITH0 AS (select T1000005.OFFICE_KEY as c1,

     T1000005.OFFICE_DSC as c2

from

     BISAMPLE.SAMP_OFFICES_D T1000005),

SAWITH1 AS (select T1000008.OFFICE_KEY as c1,

     T1000008.COST_FIXED as c2,

     T1000008.COST_VARIABLE as c3

from

     BISAMPLE.SAMP_REVENUE_F T1000008),

SAWITH2 AS (select D1.c2 as c1,

     D2.c2 as c2,

     D2.c3 as c3

from

     SAWITH0 D1 inner join SAWITH1 D2 On D1.c1 = D2.c1),

SAWITH3 AS (select D102.c1 as c1,

     sum(D102.c2) as c2,

     sum(D102.c3) as c3

from

     SAWITH2 D102

group by D102.c1)

select D1.c1 as c1, D1.c2 as c2, D1.c3 as c3, D1.c4 as c4 from ( select 0 as c1,

     D110.c1 as c2,

     D110.c2 as c3,

     D110.c3 as c4

from

     SAWITH3 D110

order by c2 ) D1 where rownum <= 125001

من الجدول المنطقي لتتبع الاستخدام، يمكنك العثور على hash_id المستخدم كمرشح مقابل الجدول الفعلي لتتبع الاستخدام.

فيما يلي وصف GUID-C053C7FB-251A-4021-A850-1F6006BEBFF1-default.jpg
.jpg

من الجدول الفعلي لتتبع الاستخدام، يمكنك العثور على physical_hash_id.

فيما يلي وصف GUID-EB289F16-56B0-4AFB-8C96-2D7B55680B7B-default.jpg
.jpg

عند استعلام الجدول V$SQL، ستجد SQL_ID مرة أخرى.

فيما يلي وصف GUID-CD805B03-A8AD-40F0-AE84-BD28AC8B6EF8-default.jpg
.jpg

يمكنك أيضًا العثور على hash_id وphysical_hash_id المنطقي في سجل إدارة الجلسات (اطلع على الأقسام المميزة في أمثلة السجلات السابقة). يعني هذا أنه يمكنك العثور على SQL_ID من السجل نفسه. مزايا استخدام جداول تتبع الاستخدام هي قيود السجل في إدارة السجلات مؤقتة، لذا ما لم تكن تجمع معرفات هاش في نفس وقت تشغيل الاستعلام، فستضيع.

لكن، لا تتم كتابة البيانات إلا بجداول تتبع الاستخدام عند اكتمال استعلام. لذا، إذا كنت تستكشف أخطاء الاستعلام الذي يعمل ولم يكتمل بعد وتصلحها وتريد تحديد sql_id، يمكنك الحصول على hash_id المنطقي وphysical_hash_id من سجل إدارة الجلسات.

إذا كنت تستكشف أخطاء جملة SQL وتحتاج إلى التحقيق في قاعدة البيانات، يمكنك ربط المعلومات في جداول تتبع الاستخدام وجدول نظام V$SQL (أو GV$SQL) للعثور سريعًا على SQL_ID لجملة SQL التي تحقق بها.