oracle 一个为空行的表 不占用表空间吗

oracle 一个为空行的表 不占用表空间吗,第1张

When you create a table, Oracle allocates to the table's data segment an initial extent of a specified number of data blocks. Although no rows have been inserted yet, the Oracle data blocks that correspond to the initial extent are reserved for that table's rows.

当用户创建数据表时,Oracle为此表的数据段(data segment)分配一个包含若干数据块(data block)的初始数据扩展(initial extent)。虽然此时数据表中还没有数据,但是在此初始数据扩展中的数据块已经为插入新数据做好了准备。

由上面而知,只要你创建一个表,即使是空的,也占用一定的表空间。

碎片检查

select tablespace_name sqrt(max(blocks)/sum(blocks))*

( /sqrt(sqrt(count(blocks)))) fsfi

from dba_free_space

group by tablespace_name order by

fsfi值越小 碎片越大 自由空间碎片索引

检查reverse_key index

select o object_name

from dba_objects o

where wner= DB_ACCT

AND O OBJECT_ID IN

(SELECT I OBJ# FROM SYS IND$ I

WHERE BITAND(I PROPERTY )= )

查具体后台进程号

select spid from v$session a v$process b where a PADDR=b ADDR and sid=

查看死锁表

SELECT SID DECODE(BLOCK NO YES ) BLOCKER

DECODE(REQUEST NO YES ) WAITER

FROM V$LOCK

WHERE REQUEST >OR BLOCK >

ORDER BY block DESC

查看剩余表空间

select a tablespace_name free/total* pct_free free/ / free(M) from

(select sum(bytes) free tablespace_name from dba_free_space group by tablespace_name) a

(select sum(bytes) total tablespace_name from dba_data_files group by tablespace_name) b

where a tablespace_name=b tablespace_name

order by pct_free

查看创建索引的进度

select sid message from  v$session_longops where sid = order by  start_time

查看缴费到帐

SELECT AREA_ID to_char(sysdate yyyy mm dd hh :mi:ss ) to_char(count( )) as cnt FROM ACCT_PAY_INTERFACE

WHERE PAY_DATE>=sysdate and FLAG= group by AREA_Id

查看最消耗资源的sql

SELECT * FROM  (SELECT PARSING_USER_ID EXECUTIONS SORTS MAND_TYPE

DISK_READS  sql_text FROM v$sqlarea ORDER BY disk_reads DESC ) WHERE ROWNUM<

查看占用系统资源的进程号spid

SELECT a username a machine a program a sid a serial# a status c piece c sql_text

FROM v$session a v$process b v$sqltext c WHERE b spid=  AND b addr=a paddr AND a sql_address=c address(+)

ORDER BY c piece

查看占用系统io较大的session

SELECT se sid se serial# pr SPID se username se status se terminal se program

se MODULE se sql_address st event st p text si physical_reads si block_changes

FROM v$session se  v$session_wait st v$sess_io si v$process pr WHERE st sid=se sid  AND st sid=si sid

AND se PADDR=pr ADDR AND se sid> AND st wait_time= AND st event NOT LIKE %SQL% ORDER BY physical_reads DESC

对检索出的结果的几点说明

我是按每个正在等待的session已经发生的物理读排的序 因为它与实际的IO相关

你可以看一下这些等待的进程都在忙什么 语句是否合理?

Select sql_address from v$session where sid=

Select * from v$sqltext where address=

执行以上两个语句便可以得到这个session的语句

你也以用alter system kill session sid serial# 把这个session杀掉

应观注一下event这列 这是我们调优的关键一列 下面对常出现的event做以简要的说明

a buffer busy waits free buffer waits这两个参数所标识是dbwr是否够用的问题 与IO很大相关的 当v$session_wait中的free buffer wait的条目很小或没有的时侯 说明你的系统的dbwr进程决对够用 不用调整 free buffer wait的条目很多 你的系统感觉起来一定很慢 这时说明你的dbwr已经不够用了 它产生的wio已经成为你的数据库性能的瓶颈 这时的解决办法如下

a 增加写进程 同时要调整db_block_lru_latches参数

示例 修改或添加如下两个参数

db_writer_processes=

db_block_lru_latches=

a 开异步IO IBM这方面简单得多 hp则麻烦一些 可以与Hp工程师联系

b db file sequential read 指的是顺序读 即全表扫描 这也是我们应该尽量减少的部分 解决方法就是使用索引 sql调优 同时可以增大db_file_multiblock_read_count这个参数

c db file scattered read 这个参数指的是通过索引来读取 同样可以通过增加db_file_multiblock_read_count这个参数来提高性能

d latch free 与栓相关的了 需要专门调节

e 其他参数可以不特别观注

外部联接 + 的用法

外部联接 + 按其在 = 的左边或右边分左联接和右联接

若不带 + 运算符的表中的一个行不直接匹配于带 + 预算符的表中的任何行

则前者的行与后者中的一个空行相匹配并被返回 若二者均不带 +

则二者中无法匹配的均被返回 利用外部联接 +

可以替代效率十分低下的 not in 运算 大大提高运行速度 例如 下面这条命令执行起来很慢

select a empno from emp a where a empno not in

(select empno from emp where job= SALE )

倘若利用外部联接 改写命令如下:

select a empno from emp a emp b

where a empno=b empno(+)

and b empno is null

and b job= SALE

可以发现 运行速度明显提高

如何更改UNDO tablespace

create undo tablespace undotbs datafile D:\oracle\product\ \oradata\qa\undotbs dbf size M

alter system set undo_tablespace=undotbs scope=both

create pfile from spfile

alter tablespace undotbs offline

drop tablespace undotbs including contents

将表改成

ALTER   TABLE   t_monitor_real_minute   NOLOGGING

Oracle RAC的参数文件和单实例参数文件不同 所以修改参数文件时需要注意

首先设置归档路径

SQL>alter system set log_archive_dest= /opt/oracle/archive scope=spfile sid= *

System altered

SQL>select sid name value from v$spparameter where name= log_archive_dest

SID        NAME                 VALUE

*          log_archive_dest     /opt/oracle/archive

然后关闭两个实例 启动实例 更改数据库为归档模式

SQL>shutdown immediate

Database closed

Database di *** ounted

ORACLE instance shut down

SQL>startup mount

ORACLE instance started

Total System Global Area bytes

Fixed Size                  bytes

Variable Size             bytes

Database Buffers          bytes

Redo Buffers               bytes

Database mounted

SQL>alter database archivelog

Database altered

SQL>alter database open

Database altered

SQL>archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /opt/oracle/archive

Oldest online log sequence    

Next log sequence to archive  

Current log sequence          

lishixinzhi/Article/program/Oracle/201311/17504


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11417693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存