[20240911]查看超長視圖的定義2.txt

来源:https://www.cnblogs.com/lfree/p/18411102
-Advertisement-
Play Games

本文介紹如何通過模型服務靈積DashScope將 圖片轉換為向量 ,併入庫至向量檢索服務DashVector中進行向量檢索。 模型服務靈積DashScope,通過靈活、易用的模型API服務,讓各種模態模型的能力,都能方便的為AI開發者所用。通過靈積API,開發者不僅可以直接集成大模型的強大能力,也可 ...


[20240911]查看超長視圖的定義2.txt

--//昨天看了鏈接:https://www.anbob.com/archives/8295.html,提供了另外的方式獲得超長定義試圖的長文本。
--//我重覆驗證看看.

1.環境:
SYS@book> @ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

2.測試:
select
 addr,
 to_number(addr,'XXXXXXXXXXXXXXXX') addr_dec,
 to_number(lag(addr,1) over (order by indx),'xxxxxxxxxxxxxxxx') lag_addr_dec,
 to_char(
 to_number(addr,'XXXXXXXXXXXXXXXX') -
 to_number(lag(addr,1) over (order by indx),'xxxxxxxxxxxxxxxx'),
 'xxxxxxxxxxxxxxxx'
 ) row_size_hex,
 to_number(addr,'XXXXXXXXXXXXXXXX') -
 to_number(lag(addr,1) over (order by indx),'xxxxxxxxxxxxxxxx') row_size,
 indx
from x$kqfvt
where indx <= 10
order by 1;

ADDR               ADDR_DEC LAG_ADDR_DEC ROW_SIZE_HEX        ROW_SIZE       INDX
---------------- ---------- ------------ ----------------- ---------- ----------
0000000016BECC00  381602816                                                    0
0000000016BECC20  381602848    381602816                20         32          1
0000000016BECC40  381602880    381602848                20         32          2
0000000016BECC60  381602912    381602880                20         32          3
0000000016BECC80  381602944    381602912                20         32          4
0000000016BECCA0  381602976    381602944                20         32          5
0000000016BECCC0  381603008    381602976                20         32          6
0000000016BECCE0  381603040    381603008                20         32          7
0000000016BECD00  381603072    381603040                20         32          8
0000000016BECD20  381603104    381603072                20         32          9
0000000016BECD40  381603136    381603104                20         32         10
11 rows selected.

--//我的測試版本也許與原作者不同,查看x$kqfvt行的長度,您會發現行長度為32(對方的測試結果40).

SELECT ta.kqftanam, co.kqfconam, co.kqfcodty, co.kqfcotyp, co.kqfcomax,
       co.kqfcolsz, co.kqfcolof, co.kqfcosiz, co.kqfcooff, co.kqfcoidx,
       co.kqfcoipo
  FROM x$kqfta ta, x$kqfco co
 WHERE co.kqfcotab = ta.indx
   AND kqftanam LIKE UPPER('%kqfvt%')
 ORDER BY ta.kqftanam, co.kqfcooff, co.indx;

KQFTANAM   KQFCONAM     KQFCODTY   KQFCOTYP   KQFCOMAX   KQFCOLSZ   KQFCOLOF   KQFCOSIZ   KQFCOOFF   KQFCOIDX   KQFCOIPO
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
X$KQFVT    ADDR               23          9          0          0          0          8          0          1          0
X$KQFVT    INDX                2         11          0          0          0          4          0          2          0
X$KQFVT    INST_ID             2         11          0          0          0          4          0          0          0
X$KQFVT    CON_ID              2         11          0          0          0          2          0          0          0
X$KQFVT    KQFTPSEL            1          6          0          0          0       4000          0          0          0
--//X$KQFVT包含5個欄位,可以發現一個細節,實際上占用8+4+4+2+4000 = 4018.而實際上行長僅僅32個位元組.
--//也就是不能以普通表方式思考看待X$ fixed table.
--//是否可以這樣理解INST_ID,CON_ID 可以通過函數取出,KQFTPSEL通過addr指向的地址取出.

SYS@book> @ xind X$KQFVT
TABLE_NAME                     INDEX_NUMBER COLUMN_NAME                    COLUMN_POSITION     CON_ID
------------------------------ ------------ ------------------------------ --------------- ----------
X$KQFVT                                   1 ADDR                                         0          0
X$KQFVT                                   2 INDX                                         0          0
--//僅僅存在2個索引addr,indr.

SYS@book> select i.addr,t.addr from x$kqfvi i,x$kqfvt t where i.kqfvinam = 'GV$ACTIVE_SESSION_HISTORY' and t.indx = i.indx;
ADDR             ADDR
---------------- ----------------
0000000016BDE4C0 0000000016BF3880

--//sql語句的信息保存在地址0000000016BF3880指向的地址.

SYS@book> oradebug setmypid
Statement processed.

SYS@book> oradebug peek 0x0000000016BF3880 32
[016BF3880, 016BF38A0) = 16E985C0 00000000 16C30640 00000000 00000000 00000000 00000000 00000000
--//sql語句保存在地址0000000016E985C0開始處.受KQFTPSEL varchar2(4000)限制僅僅取出4000位元組.

SYS@book> @ fchaz 0000000016BF3880
no rows selected

SYS@book> @ fchaz 16E985C0
no rows selected
--//這些地址不再sga uga等地方,到底在哪裡呢?

SYS@book> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID                               PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------------------------------ ------- ---------- --------------------------------------------------
       288      19200 3795                     DEDICATED 3796                                62          4 alter system kill session '288,19200' immediate;

$ pmap -x 3796 | head -10
3796:   oraclebook (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
Address           Kbytes     RSS   Dirty Mode  Mapping
0000000000400000  422472   37660       0 r-x-- oracle
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
000000001a292000    1540     396       4 r---- oracle
000000001a413000     468      28      24 rw--- oracle
000000001a488000     344     196     196 rw---   [ anon ]
000000001ad7e000     316     284     284 rw---   [ anon ]
0000000060000000   10240       0       0 rw-s- SYSV00000000 (deleted)
0000000060c00000  770048       0       0 rw-s- SYSV00000000 (deleted)
000000008fc00000    8192       0       0 rw-s- SYSV00000000 (deleted)

SYS@book> @ calcx 422472*1024

                                DEC                  HEX
----------------------------------- --------------------
                   432611328.000000 0000000019c92000

SYS@book> @ calc 0x400000 + x0000000019c92000

                                DEC                  HEX
----------------------------------- --------------------
                   436805632.000000             1A092000
                   
--//0x400000 = 4194304
--//4194304+422472*1024 = 436805632
--//4194304+422472*1024 = 0x1a092000

$ echo p/x 0x400000+422472*1024 | gdb -q
(gdb) $1 = 0x1a092000
(gdb) quit

--//很明顯在執行文件oracle裡面,也就是通過strings抽取文本,可以找到對應的sql文本.
--//我以前通過抽取libserver.a,效果一樣的.

$ strings /u01/app/oracle/product/21.0.0/dbhome_1/lib/libserver.a | grep  "x\$kewash.*x\$ash" > cc1.txt
$ strings $(which oracle) |grep "x\$kewash.*x\$ash" > cc2.txt
$ diff cc1.txt cc2.txt
--//結果不再貼出.

3.嘗試通過腳本是否可以實現,測試看看:

$ cat ext_sql.sh
#! /bin/bash
tn="${1^^}"
#echo $tn

# sqlplus -s -l / as sysdba << EOF
# set head off verify off feedback off
# select t.addr from x\$kqfvi i,x\$kqfvt t where i.kqfvinam = '$tn' and t.indx = i.indx;
# quit
# EOF

t_addr=$(sqlplus -s -l / as sysdba << EOF
set head off verify off feedback off
select t.addr addr from x\$kqfvi i,x\$kqfvt t where i.kqfvinam = '$tn' and t.indx = i.indx;
quit
EOF
)

t_addr=$(echo $t_addr|tr -d '\n ')
#echo x/s *0x${t_addr}
echo -e "set pagination off\nset print elements 0\n x/s *0x${t_addr}" | gdb -q -p $(pgrep ora_dbw0_${ORACLE_SID}) | grep '^(gdb)'

--//註:x/s 前面有1個*,表示指向地址的指針.沒有set print elements 0僅僅取出前面1段文本.

$ . ext_sql.sh 'GV$ACTIVE_SESSION_HISTORy'
(gdb) (gdb) (gdb) 0x16e985c0:   "SELECT  /*+ qb_name(gv_ashv) no_merge ordered use_nl(s,a) */ a.inst_id, s.sample_id, s.sample_time,s.sample_time_utc, a.usecs_per_row, s.is_awr_sample, a.session_id, a.session_serial#, decode(a.session_type, 1, 'FOREGROUND', 'BACKGROUND'), a.flags, a.user_id, a.sql_id, decode(bitand(a.flags, power(2, 4)), NULL, 'N', 0, 'N', 'Y'), a.sql_child_number, a.sql_opcode, a.force_matching_signature, decode(a.top_level_sql_id, NULL, a.sql_id, a.top_level_sql_id), decode(a.top_level_sql_id, NULL, a.sql_opcode,        a.top_level_sql_opcode), a.sql_opname,a.sql_adaptive_plan_resolved,a.sql_full_plan_hash_value,a.sql_plan_hash_value, decode(a.sql_plan_operation, NULL, to_number(NULL),       a.sql_plan_line_id), a.sql_plan_operation, a.sql_plan_options, decode(a.sql_exec_id, 0, to_number(NULL), a.sql_exec_id), a.sql_exec_start, decode(a.plsql_entry_object_id,0,to_number(NULL),       a.plsql_entry_object_id), decode(a.plsql_entry_object_id,0,to_number(NULL),       a.plsql_entry_subprogram_id), decode(a.plsql_object_id,0,to_number(NULL),a.plsql_object_id), decode(a.plsql_object_id,0,to_number(NULL),a.plsql_subprogram_id), decode(a.qc_session_id, 0, to_number(NULL), a.qc_instance_id), decode(a.qc_session_id, 0, to_number(NULL), a.qc_session_id), decode(a.qc_session_id, 0, to_number(NULL), a.qc_session_serial#), decode(a.px_flags, 0, to_number(NULL), a.px_flags), decode(a.wait_time, 0, a.event,    NULL), decode(a.wait_time, 0, a.event_id, NULL), decode(a.wait_time, 0, a.event#,   NULL), a.seq#, a.p1text, a.p1, a.p2text, a.p2, a.p3text, a.p3, decode(a.wait_time, 0, a.wait_class,    NULL), decode(a.wait_time, 0, a.wait_class_id, NULL), a.wait_time, decode(a.wait_time, 0, 'WAITING', 'ON CPU'), a.time_waited, (case when a.blocking_session = 4294967295         then 'UNKNOWN'       when a.blocking_session = 4294967294         then 'GLOBAL'       when a.blocking_session = 4294967293         then 'UNKNOWN'       when a.blocking_session = 4294967292         then 'NO HOLDER'       when a.blocking_session = 4294967291         then 'NOT IN WAIT'       else 'VALID'  end), (case when a.blocking_session between 4294967291 and 4294967295         then to_number(NULL)       else a.blocking_session  end), (case when a.blocking_session between 4294967291 and 4294967295         then to_number(NULL)       else a.blocking_session_serial#  end), (case when a.blocking_session between 4294967291 and 4294967295         then to_number(NULL)       else a.blocking_inst_id  end), (case when a.blocking_session between 4294967291 and 4294967295         then NULL      else decode(bitand(a.flags, power(2, 3)),NULL, 'N', 0,'N','Y')  end), a.current_obj#, a.current_file#, a.current_block#, a.current_row#,a.top_level_call#, a.top_level_call_name, decode(a.consumer_group_id, 0, to_number(NULL), a.consumer_group_id), a.xid, decode(a.remote_instance#, 0, to_number(NULL), a.remote_instance#), a.time_model, a.in_connection_mgmt, a.in_parse, a.in_hard_parse, a.in_sql_execution, a.in_plsql_execution, a.in_plsql_rpc, a.in_plsql_compilation, a.in_java_execution, a.in_bind, a.in_cursor_close, a.in_sequence_load, a.in_inmemory_query, a.in_inmemory_populate, a.in_inmemory_prepopulate, a.in_inmemory_repopulate, a.in_inmemory_trepopulate, a.in_tablespace_encryption, decode(bitand(a.flags, power(2, 5)), NULL, 'N', 0, 'N', 'Y'), decode(bitand(a.flags, power(2, 6)), NULL, 'N', 0, 'N', 'Y'), decode(bitand(a.flags, power(2, 0)), NULL, 'N', 0, 'N', 'Y'), decode(bitand(a.flags, power(2, 2)), NULL, 'N', 0, 'N', 'Y'), decode(bitand(a.flags, power(2, 8)), NULL, 'N', 0, 'N', 'Y'), a.service_hash, a.program, a.module, a.action, a.client_id, a.machine, a.port, a.ecid, a.dbreplay_file_id, a.dbreplay_call_counter, decode(a.tm_delta_time, 0, to_number(null),        a.tm_delta_time), decode(a.tm_delta_time, 0, to_number(null),        a.tm_delta_cpu_time), decode(a.tm_delta_time, 0, to_number(null),        a.tm_delta_db_time), decode(a.delta_time, 0, to_number(null),         a.delta_time), decode(a.delta_time, 0, to_number(null),         a.delta_read_io_requests), decode(a.delta_time, 0, to_number(null),         a.delta_write_io_requests), decode(a.delta_time, 0, to_number(null),         a.delta_read_io_bytes), decode(a.delta_time, 0, to_number(null),         a.delta_write_io_bytes), decode(a.delta_time, 0, to_number(null),         a.delta_interconnect_io_bytes), decode(a.delta_time, 0, to_number(null),         a.delta_read_mem_bytes), decode(a.pga_allocated, 0, to_number(null), a.pga_allocated), decode(a.pga_allocated, 0, to_number(null),         a.temp_space_allocated), a.con_dbid, a.con_id, a.dbop_name, a.dbop_exec_id FROM  x$kewash s, x$ash a WHERE s.sample_addr = a.sample_addr and       s.sample_id   = a.sample_id   and       s.sample_time = a.sample_time and       nlssort(s.need_awr_sample,'nls_sort = binary') =       nlssort(a.need_awr_sample,'nls_sort = binary')"
(gdb) quit

$ . ext_sql.sh 'v$waitstat'
(gdb) (gdb) (gdb) 0x16e31ec0:   "select class,count,time, con_id from gv$waitstat where inst_id = USERENV('Instance') "
(gdb) quit

$ . ext_sql.sh 'v$waitstat'| sed 's/^(gdb).*:\t"//;s/"$//;/quit$/d'
select class,count,time, con_id from gv$waitstat where inst_id = USERENV('Instance')

4.附上xind.sql腳本:

$ cat xind.sql
-- Copyright 2023 lfree. All rights reserved.
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions.
--------------------------------------------------------------------------------
--
-- File name:   xind.sql
-- Purpose:     query X$ index
-- Author:      lfree
--
-- Usage:
--     @ xind <x$table_name,...>
--     @ xind <x$kglob,x$kgldp>
--------------------------------------------------------------------------------
set termout off
column column_string new_value column_string format a200
select decode('&1','','1=1','1','1=1','1=1','1=1','table_name in ('||''''||replace(upper('&1'),',',''',''')||''')' ) column_string from dual ;
set termout on

select * from V$INDEXED_FIXED_COLUMN where 1=1 and (&column_string);



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、打開MySQL Workbench 2、進行資料庫連接配置 如果之前連過,會有歷史記錄,直接點擊需要備份的連接即可 3、進入主界面後,選擇左側的Administration選項卡,然後點擊Data Export;或者點擊工具欄的Server——Data Export 4、選擇要備份的資料庫,預設 ...
  • 升級典型問題 官網升級操作指引 離線升級,一般線上操作之前需要照著做一遍,但是由於數據量少、monit進程在測試環境沒有啟動等原因,一些操作、配置問題在測試過程中不會暴露,在生成操作的時候才暴露,下麵3項是比較常見的容易遺漏的: 1、monit進程沒停止引起升級失敗 monit進程是什麼 monit ...
  • 之前吐槽了很多年的統計信息自動更新閾值演算法(操蛋的500 + (0.20 * n)),其實早在SQLServer 2016中就有優化過了,一直沒有註意這個細節,汗顏!https://www.cnblogs.com/wy123/p/5790855.htmlhttps://www.cnblogs.com ...
  • 本文主要為大家介紹Apache DolphinScheduler的單機部署方式,方便大家快速體驗。 環境準備 需要Java環境,這是一個老生常談的問題,關於Java環境的安裝與配置期望大家都可以熟練掌握。 驗證java環境 java -version 下載安裝包並解壓 使用wget下載安裝包 wge ...
  • 《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,作者為張永清等著,在2024.9.11號晚上20:00,本書作者張永清聯合鋒哥聊數倉公眾號和清華大學出版社一起,向各大大數據技術愛好者通過三輪互動活動贈送了3本正版圖書。 《數據資產管理核心技術與應用》深入探討數據資產管理的核心技術與應用 ...
  • SQL Server 中的 NUL 設備/NIL設備 在 SQL Server 中,有一個特殊的設備叫做 NUL(註意,不是 NULL),它類似於文件系統中的“黑洞”。NUL 設備類似於 Linux 系統中的 /dev/null,所有寫入到 NUL 的數據都會被直接丟棄。 我們可以利用這個特性,在不 ...
  • Apache SeaTunnel 作為一個開源的數據集成工具,旨在簡化和加速海量數據的採集和傳輸。 社區的 Committer 是指擁有項目存儲庫的寫許可權的社區成員,即 Committer 可以自行修改代碼、文檔和網站,也可以合併其他成員的貢獻。成為 Apache SeaTunnel Committ ...
  • Percona Toolkit 神器全攻略(性能類) Percona Toolkit 神器全攻略系列共八篇,前文回顧: 前文回顧 Percona Toolkit 神器全攻略 Percona Toolkit 神器全攻略(實用類) Percona Toolkit 神器全攻略(配置類) Percona T ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...