1、CTE特性会提前抽取子查询或视图的数据,并放入临时表中,以便多次使用。但对于含有大量数据的子查询或视图,这个特性容易带来问题。此时禁用掉CTE特性,然后将条件传入子查询或视图,性能可能会更好。
建议直接关闭这个特性:alter system set "_xsolapi_generate_with_clause"=0;
/*+opt_param('xsolapi_generate_with_clause', 'false')*/
obclient -hOCEANBASE-SD-TEST-01.DBCLOUD.MIDEA.COM -P2883 -uQMS@QMS#OCEANBASE_TEST_02_080819:1687182345 -DQMS -p
2、在OB中,你可以试一下GV$OB_LOCKS
3、
show variables like '%timeout%';
ob_query_timeout
120000000
高哥帮在OB设置一下超时时间
set global ob_query_timeout=1200000000
我这边因为需要将OB的语法兼容处理同步ORACLE
涉及到包较多,想直接在oracle uat直接覆盖我改动的上面这些包
这些包也是基于最新master分支的改动,我一个一个在UAT加代码耗时非常长
看下哪些包需要我特别注意的,不然会覆盖大家的在UAT改动的代码。
-- SESSION_ID:3222079255
select * from GV$OB_TRANSACTION_PARTICIPANTS;
alter system kill session '3222079255';
再根据session_id或TX_ID去查询gv$ob_sql_audit视图,在查询结果中找找对应的SQL
目前OCP没有专门的监控项目,如果说需要监控的话,可以使用SYS用户下的dba_tables视图来检查:select count(*) from DBA_TABLES t where t.TEMPORARY='Y';
select t.table_id, t.table_name,t.part_num,t.part_func_type, v.table_name as index_name,v.index_type
from sys.all_virtual_table_real_agent t,
(select table_name, data_table_id, index_type
from sys.all_virtual_table_real_agent
where data_table_id != 0
and index_type in (3,4,7,8,11,12)
) v
where t.table_id = v.data_table_id
and t.part_num=1 --分区数量,1代表只有一个分区
and t.part_func_type=0 --分区函数类型,0代表没有分区
begin
sys.p_kill_session(3059,56242);
end;
CREATE TABLE employeesbak AS SELECT * FROM cims.employees WHERE 1=0;
SELECT * FROM SYS.GV$OB_PARAMETERS WHERE NAME LIKE '_resource_limit_max_session_num';
牛B语句 备份表
insert into IQC_EXAMINED_OUTGOING_DTL1116 select * from IQC_EXAMINED_OUTGOING_DTL
CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
-- SESSION_ID:3222079255
select * from GV$OB_TRANSACTION_PARTICIPANTS;
alter system kill session '3222079255';