扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Oracle参数查询命令show parameter的一个小技巧 可以使用模糊查询 比如我想查询包含db_的参数 那么我就可以用
创新互联专注于八步网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供八步营销型网站建设,八步网站制作、八步网页设计、八步网站官网定制、微信平台小程序开发服务,打造八步网络公司原创品牌,更为您提供八步网站排名全网营销落地服务。
SQL show parameter db_;
NAME TYPE VALUE
db_ k_cache_size big integer
db_ k_cache_size big integer
db_ k_cache_size big integer
db_ k_cache_size big integer
db_ k_cache_size big integer
db_block_buffers integer
db_block_checking string FALSE
db_block_checksum string TRUE
db_block_size integer
db_cache_advice string ON
db_cache_size big integer
NAME TYPE VALUE
db_create_file_dest string
db_create_online_log_dest_ string
db_create_online_log_dest_ string
db_create_online_log_dest_ string
db_create_online_log_dest_ string
db_create_online_log_dest_ string
db_domain string
db_file_multiblock_read_count integer
db_file_name_convert string
db_files integer
db_flashback_retention_target integer
NAME TYPE VALUE
db_keep_cache_size big integer
db_name string Ora
db_recovery_file_dest string d:\oracle\product\ /flash
_recovery_area
db_recovery_file_dest_size big integer G
db_recycle_cache_size big integer
db_unique_name string Ora
db_writer_processes integer
dbwr_io_slaves integer
rdbms_server_dn string
standby_archive_dest string %ORACLE_HOME%\RDBMS
NAME TYPE VALUE
standby_file_management string MANUAL
SQL spool off;
对于一个刚开始接触Oracle的人来数要记住Oracle的参数名称是件非常难的事 有了这个参数的模糊查询我们可以先只记个大概 通过参数查询找到详细的参数名称 一来二去熟悉了就可以 但是后面三个只是内部包含db和_ 可能是包含就算吧 具体的我也不是很清楚 今天下午无意中发现的!
比如下面的我想看包含db_c的所有参数
SQL show parameter db_c;
NAME TYPE VALUE
db_cache_advice string ON
db_cache_size big integer
db_create_file_dest string
db_create_online_log_dest_ string
db_create_online_log_dest_ string
db_create_online_log_dest_ string
db_create_online_log_dest_ string
db_create_online_log_dest_ string
lishixinzhi/Article/program/Oracle/201311/16887
在Oracle中,可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。其语法为:
eg: dbms_lob.instr(字段名(clod类型),'查询条件',1,1)
其中sourceString代表想要查询的字段;
destString代表查询条件;
start代表查找的开始位置,该参数可选的,默认为1;
appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;
如果start的值为负数,那么代表从右往左进行查找。
返回值为:当目标字符串没有在源字符串中找到,返回0;当源字符串或目标字符串为null,则返回null;
其他情况则返回目标字符串在源字符串中的其实位置
普通参数:也就是Oracle系统正常使用的一些参数,
非凡参数:包括三种,过时参数、强调参数和隐藏参数。
随着Oracle数据库新版本的发布,相应每次都会增加或者删除一些参数。下面具体介绍如何查询当前系统版本中的各种参数情况。
一、过时参数 和 强调参数
Oracle 数据库中,系统提供了几个视图可以查看系统参数的情况。视图 V$OBSOLETE_PARAMETER 中含有所有的过时 (obsolete) 和强调 (underscored) 参数。
这里首先说明一下什么是 Oracle 的过时 (obsolote) 和强调 (underscored) 参数,过时参数,顾名思义就是在 Oracle 以前的版本中存在,但在新版本中已经淘汰了的参数,已经不再使用;而强调参数,是指那些在新版本中保留了下来,但是除非非凡需要不希望用户使用的那些参数。在视图 V$OBSOLETE_PARAMETER 中,包含这些参数的名称和一个标志字 ISSPECIFIED ,该标志字用来指出这个参数是否在 init.ora 文件中已实际设置。 下面的 SQL 脚本列出了当前系统中所有的过时参数名称以及它们是否在当前系统中设定。
你查看的是初始化文件initorcl.ora,initorcl.ora记录了控制文件的路径。所以内容是正确的
。
你可以
create
pfile='e:\oracle\aaa.ora'
from
spfile;
然后查看e:\oracle\aaa.ora文件
这里记录就是你的参数,可以修改
接着通过pfile文件生成spfile文件
create
spfile
from
pfile=='e:\oracle\aaa.ora';
启动数据库就可以了
pfile是文本的,可以修改,但修改后数据库必须重新启动才生效。
spfile是二进制的,不可以手工修改,可以在线修改参数,不需要重新启动数据库。
查询优化器参数
1. optimizer_mode
查询优化器是为了找一个最高效的执行计划,这个参数用来定义什么是“高效”,比如是更快还是占用资源更少。在oracle10g中只支持两个参数值:
all_rows:提供全部数据
first_rows(n):n为大于0的自然数,表示尽快传输前面n条数据(比如分页查询的时候,我第一次只查询前面10条数据)
oracle10g默认为all_rows,可以再数据库级别,会话级别,或者执行SQL的时候修改该参数的值。
数据库级别:alter system set optimizer_mode=first_rows(10) scope=spfile;
会话级别:ALTER SESSION SET OPTIMIZER_MODE=first_rows(10);
SQL级别:SELECT /*+ first_rows(10) */ id,name from t1 order by id;
其实,默认all_rows是最好的方式,如果确实是只要查询小部分数据,可以在sql级别加上提示,看是否能提高性能。
2. db_file_multiblock_read_count
在多块读的情况下(比如全表扫描),该参数说明一次最多可读取的数据块数目。设置得太小的话,效率低。设置得太高也不见得就好(太高,会受I/O最大吞吐量限制。比如设置成一次最多读取1024块,但I/O最大吞吐量只允许32块,那一次最多也只读取32块。而且一次读取很多块,开销会偏高。)应该通过测试,才能知道应该把该参数设置成哪一个值。
测试过程:
1. 创建一张大表,比如上千万行级别的数据
2. 循环设置该参数的值,查看全表扫描的速度。类似于以下语句:
[sql] view plain copy
span style="font-size:14px;" declare
l_count pls_integer;
l_time pls_integer;
l_starting_time pls_integer;
l_ending_time pls_integer;
begin
dbms_output.put_line('dbfmbrc seconds');
for l_dbfmbrc in 1..32
loop
execute immediate 'alter session set db_file_multiblock_read_count='||l_dbfmbrc;
l_starting_time := dbms_utility.get_time();
select /*+ full(t) */ count(*) into l_count from big_table t;
l_ending_time := dbms_utility.get_time();
l_time := round((l_ending_time-l_starting_time)/100);
dbms_output.put_line(l_dbfmbrc||' '||l_time);
end loop;
end;
//span
3. optimizer_index_cost_adj
影响走索引扫描的开销计算。 取值范围1到10000.默认值为100,超过100后,走索引扫描的开销越高,从而使得查询优化器更加倾向于使用全表扫描。相反,小于100,索引扫描的开销就越低,从而使得查询优化器更加倾向于使用索引扫描。从下面索引扫描开销计算公式可以看出:
io_cost=(blevel+(leaf_blocks+culstering_factor)*selectivity) *optimizer_index_cost_adj/100.
一般是默认值不需要修改,但是如果发现本应该走索引扫描结果走了全表扫描,可以适当调低该值,但是,这个值不应该设置过低,因为,过低的话,如果两个索引扫描的开销不同,可能通过该公式一算,开销就变成一样的了。总之,不建议修改该参数的值。
PGA参数
1. workarea_size_policy
管理工作区域内存(PGA)的方式,
auto:oracle10g默认方式,委托给内存管理器自动管理(建议不需要修改)
manual:oracle9i默认方式,oracle9i没有自动管理功能。
2. pga_aggregate_target
如果是自动管理PGA,那么该参数用于指定实例可用的PGA的大小,默认是SGA的20%。即使今后用的内存超过了设置的值,也没有关系,oracle会自动增大PGA的值。比如该参数设置的是200M,今后某一时刻,需要300M,也是没问题的,会自动增长。
3. sort_area_size
手动管理PGA,该参数指定分配多大的内存用于排序操作,过小的话,会影响性能,过大的话浪费空间。很难说一个合适的默认值,因为用户场景变化非常大,实际情况得实际处理。
4. hash_area_size
手动管理PGA,该参数用于指定哈希连接的工作区域大小,同样建议它的值也很困难。如果过小,那么查询优化器就会高估哈希连接的开销,偏向于合并连接。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流