没有高并发,亿万级数据优化的基础sql六

  各位童鞋大家好。很高兴又和大家见面了,因为个人原因该博客断了很长时间,深感抱歉。今天继续,继续前一讲的select解说。

  在实际当中,select 还有很多场景,例如这样一个实际工作的场景。某一天,运行的系统突然变的很慢很慢。这个时候第一反应应该就是去查询服务器情况了,cpu,内存,磁盘。发现指标都正常,这就有些纳闷了。如果继续查询系统日志,可能就会发现问题所在了。对,就是表空间用完了。以oracle为例子,下面一条sql语句就是查询表空间的情况的:

SELECT a.tablespace_name "数据库表空间名",
       total "数据库表空间总大小",
       free "数据库表空间剩余大小",
       (total - free) "数据库表占用空间大小",
       ROUND((total - free) / total * 100, 2) || '%' "数据库表空间已使用空间百分比"
  FROM (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 total
          FROM dba_data_files
         GROUP BY tablespace_name) a,
       (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 free
          FROM dba_free_space
         GROUP BY tablespace_name) b
 WHERE a.tablespace_name = b.tablespace_name
 ORDER BY (total - free) DESC;

这个时候查出的结果就会发现有一个表空间使用百分比已经高达97%了。说明表空间容量被用完,需要对其进行扩容。上述sql语句涉及到2个视图,dba_data_files,dba_free_space。这2个视图童鞋们有兴趣可以深入探究一下,本文重点讲述sql语句,所以暂不深入此处。可能在很多大厂一般程序员很少涉及到这条sql,但是在很多小厂就必须会使用它了。咱们接下来分析下这条sql,这条sql还是相对简单的。

首先视图可以和表一样进行任何查询操作。首先该条sql对dba_free_space,dba_data_files进行了分组统计操作,并在统计时候用到了sun()函数和除法运算。操作完成后分别设为临时表a,b。然后根据表a,b的tablespace_name 字段是否相对进行关联查询,最后并对(total - free)进行降序排列。当然这条语句的where条件部分可用inner join进行连接查询,效果一样。

表空间扩容sql就比较简单了。根据实际磁盘情况和数据库使用情况使用alter语句进行扩容。sql如下:

alter tablespace tablespace_name
     add datafile 'D:\APP\ORCL\DATAFILE\XXX.DBF' size xxxm

好了,这篇就暂时到这吧。下篇见,继续咱们基础的sql之旅吧!

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangzewu1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值