数据库非常慢,简单的sql速度也很慢。
可能的原因:
1、归档日志是否满了。 (如果满了,清理下)
2、表空间是否满了。
这里说下表空间的处理。
查看表空间,扩展表空间
查看表空间及使用率(total表示目前的可用空间):
-- 查看表空间及使用率等信息
SELECT
A.TABLESPACE_NAME,
FILENUM,
TOTAL "TOTAL (MB)",
F.FREE "FREE (MB)",
TO_CHAR ( ROUND( FREE * 100 / TOTAL, 2 ), '990.00' ) "FREE%",
TO_CHAR ( ROUND( ( TOTAL - FREE ) * 100 / TOTAL, 2 ), '990.00' ) "USED%",
ROUND( MAXSIZES, 2 ) "MAX (MB)"
FROM
(
SELECT
TABLESPACE_NAME,
COUNT( FILE_ID ) FILENUM,
SUM( BYTES / ( 1024 * 1024 ) ) TOTAL,
SUM( MAXBYTES ) / 1024 / 1024 MAXSIZES
FROM
DBA_DATA_FILES
GROUP BY
TABLESPACE_NAME
) A,
( SELECT TABLESPACE_NAME, ROUND( SUM( BYTES / ( 1024 * 1024 ) ) ) FREE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) F
WHERE
A.TABLESPACE_NAME = F.TABLESPACE_NAME
一看使用率确实很高,达到了95%。
修改表空间大小,根据上述查询的total来看。
-- 设置可用空间,注:可用空间不能超过最大空间,就是上面查询结果的最后一列
alter database datafile '/oracle/oradata/myapp/uuu.dbf' resize 17865m;
-- 设置为自动扩展
alter database datafile '/oracle/oradata/myapp/uuu.dbf' autoextend on;
扩展完表空间需要重启吗?
不确定,为了确保万一,我是重启了。 (生产环境一定要在窗口期操作额)
再次查询速度果然快了很多。
命令行查看表空间(简易)
命令如下:
col file_name for a60; -- 文件名字符长度为60个字符
set linesize 160; -- 每行最多显示160个字符
select file_name,tablespace_name,bytes from dba_data_files;