2.查看调优参数值 SELECT DBMS_PARAM.SHOW_RECOMMEND() FROM dual;
4.使用SQL命令调整 -- 调整 DATA_BUFFER_SIZE 至 44 GB ALTER SYSTEM SET DATA_BUFFER_SIZE = 4G scope=spfile;
-- 调整 WORK_AREA_POOL_SIZE 至 1 GB ALTER SYSTEM SET WORK_AREA_POOL_SIZE= 1G scope=spfile;
-- 调整 SHARE_POOL_SIZE 至 1 GB(1024 MB) ALTER SYSTEM SET SHARE_POOL_SIZE = 1G scope=spfile;
-- 调整 VM_BUFFER_SIZE 至 1 GB(1024 MB) ALTER SYSTEM SET VM_BUFFER_SIZE = 1G scope=spfile;
5.重启数据库 yasboot cluster restart -c yashandb
6.查看参数值是否修改成功 select * from v$parameterwhere name in('DATA_BUFFER_SIZE','WORK_AREA_POOL_SIZE','SHARE_POOL_SIZE','VM_BUFFER_SIZE');
3. 评估源端数据(以 Oracle 为例)
① 总数据量(不含索引)
SELECT ROUND(SUM(bytes)/1024/1024/1024, 2) AS total_gb FROM dba_segments WHERE segment_type IN ('TABLE','TABLE PARTITION','TABLE SUBPARTITION','LOBSEGMENT','LOBINDEX') AND owner IN ('SCHEMA1','SCHEMA2');
② 表总数
SELECTCOUNT(*) AS table_count FROM dba_tables WHERE owner IN ('SCHEMA1','SCHEMA2');
③ 单表总大小 Top 100(含分区与 LOB)
SELECT*FROM ( SELECT ts.owner, ts.table_name, ts.size_gb, NVL(dt.partitioned, 'NO') AS is_partitioned -- YES表示分区表,NO表示非分区表 FROM ( SELECT s.owner, NVL(l.table_name, s.segment_name) AS table_name, ROUND(SUM(s.bytes)/1024/1024/1024, 2) AS size_gb FROM dba_segments s LEFTJOIN dba_lobs l ON s.owner = l.owner AND s.segment_name = l.segment_name WHERE s.owner IN ('SCHEMA1','SCHEMA2') AND s.segment_type IN ('TABLE','TABLE PARTITION','TABLE SUBPARTITION','LOBSEGMENT','LOBINDEX') GROUPBY s.owner, NVL(l.table_name, s.segment_name) ) ts LEFTJOIN dba_tables dt ON ts.owner = dt.owner AND ts.table_name = dt.table_name ORDERBY ts.size_gb DESC ) WHERE ROWNUM <=100;
④ 单表 LOB 大小 Top 100
SELECT*FROM ( SELECT l.owner, l.table_name, ROUND(SUM(s.bytes)/1024/1024/1024, 2) AS lob_gb FROM dba_lobs l JOIN dba_segments s ON l.owner = s.owner AND l.segment_name = s.segment_name WHERE l.owner IN ('SCHEMA1','SCHEMA2') GROUPBY l.owner, l.table_name ORDERBY lob_gb DESC ) WHERE ROWNUM <=100;
⑤ 各分级表数量占比
WITH TableSizes AS ( SELECT s.owner, NVL(l.table_name, s.segment_name) AS table_name, SUM(s.bytes)/1024/1024/1024AS size_gb FROM dba_segments s LEFTJOIN dba_lobs l ON s.owner = l.owner AND s.segment_name = l.segment_name WHERE s.owner IN ('SCHEMA1','SCHEMA2') AND s.segment_type IN ('TABLE','TABLE PARTITION','TABLE SUBPARTITION','LOBSEGMENT','LOBINDEX') GROUPBY s.owner, NVL(l.table_name, s.segment_name) ) SELECT CASE WHEN size_gb <5THEN'1. 小表 (0~5G)' WHEN size_gb >=5AND size_gb <50THEN'2. 中表 (5~50G)' WHEN size_gb >=50AND size_gb <100THEN'3. 大表 (50~100G)' ELSE'4. 超大表 (>100G)' ENDAS size_level, COUNT(*) AS table_count, ROUND(COUNT(*) *100.0/SUM(COUNT(*)) OVER(), 2) ||'%'AS ratio FROM TableSizes GROUPBY CASE WHEN size_gb <5THEN'1. 小表 (0~5G)' WHEN size_gb >=5AND size_gb <50THEN'2. 中表 (5~50G)' WHEN size_gb >=50AND size_gb <100THEN'3. 大表 (50~100G)' ELSE'4. 超大表 (>100G)' END ORDERBY size_level;
⑥ 大表占比(> 5 GB)
WITH tab_size AS ( SELECT owner, segment_name, SUM(bytes)/1024/1024/1024AS gb FROM dba_segments WHERE owner IN ('SCHEMA1','SCHEMA2') AND segment_type IN ('TABLE','TABLE PARTITION','TABLE SUBPARTITION') GROUPBY owner, segment_name ) SELECTCOUNT(*) AS total_tab, SUM(CASEWHEN gb >5THEN1ELSE0END) AS big_tab, ROUND(SUM(CASEWHEN gb >5THEN1ELSE0END) /COUNT(*) *100, 2) AS big_pct FROM tab_size;
09:29:12.202 [main] INFO com.yashandb.tool.ymp.command.util.CommandUtil - task completed, status: SUCCESS OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f095c9e0000, 65536, 0) failed; error='Not enough space' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 65536 bytes for committing reserved memory. # An error report file with more information is saved as: # /home/ymp/hs_err_pid8610.log YMP install failed!
Solution:
Decrease Java heap size (-Xmx/-Xms) and thread stack sizes (-Xss).