大记录集驱动hash join导致额外物理读
Monday, May 26th, 2008
以前对hash join时应该用大记录集做驱动表还是用小记录集做驱动表一直存在疑虑, 直到最近做了一个实验, 才真正体会到其间的差别.实验过程如下.
用大记录集做驱动的执行计划如下:
———————————————————————————————————————————————————
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost |
———————————————————————————————————————————————————
| 0 | SELECT STATEMENT | | 1 | 12 | | 1784 |
| 1 | SORT AGGREGATE | | 1 | 12 | | |
|* 2 | HASH JOIN | | 1820K| 20M| 31M| 1784 |
| 3 | INDEX [...]
记一次BT的数据订正
Monday, May 26th, 2008
最近业务部门提出一个需求, 数据库里有些字段中保存的信息里全角和半角字符参杂, 影响市容, 要求做数据订正, 全部统一.
其中英文/数字/英文标点符号 都统一用半角字符, 而日文字符都统一用全角字符. 而且提出订正的字段中还包含一些clob字段.
那就函数+游标, 慢慢订正吧, 分析了一下, 要写四个函数:
1. varchar2数据类型的, 全角英文变半角.
2. clob数据类型的, 全角英文变半角.
3. varchar2数据类型的, 半角日文变全角.
4. clob数据类型的, 半角日文变全角.
开工:
第一个, 还好, 有现成函数: to_single_byte.
TO_SINGLE_BYTE returns char with all of its multibyte characters converted to their corresponding single-byte characters. char can be of datatype CHAR, VARCHAR2, NCHAR, or NVARCHAR2. The value returned is in the same datatype as [...]
一条Mysql上的Sql优化经历
Saturday, May 24th, 2008
前段时间一位同事收到某开发部门一位同事求助,希望帮忙优化一条Mysql的sql语句,大体如下:
select n.id ,nc.content
from news n force index (category1_status,category2_status,category3_status),news_content nc
where n.id=nc.id
and n.status=2 and (n.category_id_1 in (5003107,5003108)
or n.category_id_2 in (5003107,5003108)
or n.category_id_3 in (5003107,5003108)
调试的时候发现怎么都不能走index_merge的执行计划(我们所期望的),后来临时给他们一个union的解决方案。后来下班吃完晚饭后一起找问题,发现即使只有单个表,也没办法走到index_merge的执行计划,不管是加提示还是不加提示,调试过程如下:
mysql> explain select n.id ,nc.content
-> from news n force index (category1_status,category2_status,category3_status),news_content nc
-> where n.id=nc.id
-> [...]
test 代码高亮
Friday, May 23rd, 2008
select * from test where id=1005;
declare
begin
for c in ( select * from test) loop
dbms_output.put_line(’test’);
end loop;
end;
/
function test(){ alert(’test javascript code’);}
用法是在要格式化的文本中前后分别加入<coolcode lang=”"> 和</coolcode>
只要你在输入了脚本后选中脚本区域,在编辑器的html输入模式中按c-code按钮会自动生成
lang支持的格式有:
cpp
CSS
diff
DTD
HTML
java
javascript
mysql
perl
PHP
python
ruby
SQL
XML
表空间管理
Monday, April 21st, 2008
上周有个测试告诉我,发生了这么一件事:
ORA-01653: unable to extend table ZEUS.ALI_ZEUS_ADVERTISE_PUBLISH_LOG by 8192 in tablespace ZEUSDATA
我当时上库上查了下,其实这个TBS上还有200多M剩余。想不通,为什么会这样。
现在回头想想,和我EXTENT的扩展方式是SYSTEM有关。
因为SYSTEM的话,很有可能这次是1M,下次是2M,下次是4M,下次是8M,2的N次方。
因此,我这个TBS很大了,几十G了。经过N次扩展了。下次扩展需要200M以上了,报了上面那个错误。
现在新建的表空间,都采用uniform size了。
希望大家拍砖!!
V$UNDOSTAT
Thursday, April 17th, 2008
很多人一直很困惑,如何去设置UNDO Retention和UNDO TBS的大小,其实可以根据v$undostat来做判断。
特别是UNDO TBS的大小,很大一部分取决于DBA对系统的熟悉程度(虽然算UNDO的公式很多),见过很多人,为了防止出错,把UNDO TBS设置的其大,包括UNDO Retention。
今天看文档,文档上说:
UNDO最大可以设置为:undo maximum value is 2的32次方 seconds (more than 187 years).
这下可以放心了,尽管设吧!!
RAC安装之数据库创建
Saturday, April 12th, 2008
手工创建RAC数据库其实和普通数据库没有太大区别,需要注意几点:
1.需要为各个接点额外创建undo tablespace,redo group
2.需要为各个接点激活日志thread
3.create database的时候cluster_database参数设置为false,创建成功后在改为true,让各个接点mount
–创建数据库
SQL> CREATE DATABASE asmrac
2 USER SYS IDENTIFIED BY a35baba
3 USER SYSTEM IDENTIFIED BY a35baba
4 controlfile reuse
5 LOGFILE
6 GROUP 1 (’+DATATOMB/redo_1_1_1.log’,’+DATATOMB/redo_1_2_1.log’) SIZE 512M REUSE,
7 GROUP 2 (’+DATATOMB/redo_2_1_1.log’,’+DATATOMB/redo_2_2_1.log’) SIZE 512M REUSE,
8 GROUP 3 (’+DATATOMB/redo_3_1_1.log’,’+DATATOMB/redo_3_2_1.log’) SIZE 512M REUSE,
9 GROUP 4 (’+DATATOMB/redo_4_1_1.log’,’+DATATOMB/redo_4_2_1.log’) SIZE 512M REUSE
10 MAXLOGFILES 64
11 MAXLOGMEMBERS [...]
RAC安装之创建ASM
Saturday, April 12th, 2008
–编辑ASM的init.ora
myasm1.instance_number=1
myasm2.instance_number=2
myasm3.instance_number=3
myasm4.instance_number=4
myasm1.instance_name=myasm1
myasm2.instance_name=myasm2
myasm3.instance_name=myasm3
myasm4.instance_name=myasm4
instance_type=asm
cluster_database=true
asm_diskgroups=’datatomb’
asm_diskstring=’/opt/oracle/oradata/asmrac/disk*’
processes=200
large_pool_size=12M
remote_login_passwordfile=exclusive
core_dump_dest=/opt/oracle/admin/myasm/cdump
user_dump_dest=/opt/oracle/admin/myasm/udump
background_dump_dest=/opt/oracle/admin/myasm/bdump
export ORACLE_SID=myasm3
SQL> startup nomount;
ASM instance started
Total System Global Area 130023424 bytes
Fixed Size 2019032 bytes
Variable Size 102838568 bytes
ASM Cache 25165824 bytes
–ASM已经discover了指定的磁盘,状态为CANDIDATE
SQL> select header_status, path from v$asm_disk;
HEADER_ST PATH
——— ————————————————–
CANDIDATE /opt/oracle/oradata/asmrac/disk2
CANDIDATE /opt/oracle/oradata/asmrac/disk1
–创建磁盘组datatomb,不使用镜像
SQL> create diskgroup datatomb
2 external redundancy disk
3 ‘/opt/oracle/oradata/asmrac/disk1′,
4 ‘/opt/oracle/oradata/asmrac/disk2′;
Diskgroup created.
–disk状态已经是member
SQL> select header_status, path from v$asm_disk;
HEADER_ST PATH
——— ————————————————–
MEMBER /opt/oracle/oradata/asmrac/disk2
MEMBER /opt/oracle/oradata/asmrac/disk1
–1T的空间
SQL> select TOTAL_MB,free_mb from v$asm_diskgroup;
TOTAL_MB [...]


