Oracle 23c 深入探讨 内存中向量连接增强
内存深度向量化框架首次在 Oracle Database 21c 中引入。利用新框架的第一个功能是内存中矢量化连接。在 Oracle Database 23c 中,内存深度矢量化已扩展为支持以下附加连接类型:
• 多级散列连接
• 多重连接键
• 半连接
• 外连接
• 按聚合进行完整分组
此增强功能通过利用单指令、多数据 (SIMD) 向量指令来实现额外的性能。我使用 Oracle Database 23c Free 作为后面的示例以及 SSB 模式。
还有一个细节。与连接组类似,内存中深度向量化是 SQL Monitor 捕获的运行时决策。通过单击散列连接操作的双筒望远镜,可以在 SQL Monitor 活动报告中显示内存中深度向量化的使用情况。例如:
请注意,第一个统计数据“DeepVec Hash Joins”设置为 1。这意味着执行了深度向量连接。还有第二种方法可以使用 SQL 显示相同的信息。以下 SQL 语句将显示基础 SQL Monitor 表中的相同信息:
set echo off set trimspool on set trim on set pages 0 set linesize 1000 set long 1000000 set longchunksize 1000000 PROMPT Deep Vectorization Usage: ; PROMPT ------------------------- ; PROMPT ; SELECT ' ' || deepvec.rowsource_id || ' - ' row_source_id, CASE WHEN deepvec.deepvec_hj IS NOT NULL THEN 'deep vector hash joins used: ' || deepvec.deepvec_hj || ', deep vector hash join flags: ' || deepvec.deepvec_hj_flags ELSE 'deep vector HJ was NOT leveraged' END deep_vector_hash_join_usage_info FROM (SELECT EXTRACT(DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_XML, q'#//operation[@name='HASH JOIN' and @parent_id]#') xmldata FROM DUAL) hj_operation_data, XMLTABLE('/operation' PASSING hj_operation_data.xmldata COLUMNS "ROWSOURCE_ID" VARCHAR2(5) PATH '@id', "DEEPVEC_HJ" VARCHAR2(5) PATH 'rwsstats/stat[@id="11"]', "DEEPVEC_HJ_FLAGS" VARCHAR2(5) PATH 'rwsstats/stat[@id="12"]') deepvec;