从Approx_Count_Distinct到M7的CPU集成

昨天和朋友交流,联想起Oracle的两个特性,approx_count_distinct 和 SQL in Silicon,从软件到硬件,从典型SQL入手的优化,Oracle一步一步走向细节和性能的极致

在Oracle 12c中,有一个新的函数被引入进来 - approx_count_distinct 。这个函数的作用是,当我们进行Count Distinct计算时,给出一个近似值。

TOM说,这个函数会带来5x ~ 50x的性能提升,精度可以达到97%以上。在不需要绝对精确的返回值时,这个函数可以发挥其显著的功效。

这个估算值不绝对精确,但是在很多情况下足够,又可以极大的节省资源。在很多系统中,COUNT DISTINCT是个常见的操作,如果使用这个函数,则可能带来很好的性能改善。

以下是我非常简单的一个测试,可以看到基本的效果:

在简单的小数据量测试中,很可能看不到几十倍的改变。approx_count_distinct在大数据量下的表现会非常好,资源使用非常低,极其稳定

以下几张图引自数据库专家 Christian Antognini的测试,网页链接如下:

https://antognini.ch/2014/10/the-approx_count_distinct-function-a-test-case/

以下两图可以看到近似计算在大数据量下的响应时间稳定,内存消耗很少,这在大数据量的计算环境下,改进是显著的:

而且,这个估算值的偏差很小,如同TOM所有,通常97%的准确性,并且有信心达到95%,下图也很好的验证了这个偏离范围:

这让我联想到Oracle的M7处理器,其中的Software / SQL IN Silicon,Oracle进一步将那些常见的COUNT取值SQL固化进了CPU,进一步为用户带来10几倍的性能提升

count(*) 和 count distinct 都是非常常见的操作,也很消耗资源。从常见、常用的SQL入手,Oracle的一点点改进都会给用户带来帮助,在细节上的优化Oracle做到极致了。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2015-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

基于意图的网络:是否需要推翻和替换我们的现有网络?

基于意图的网络最近十分火爆,主要是由于思科密集的营销活动。那么基于意图的网络究竟是什么呢?

982
来自专栏linux驱动个人学习

Cache 和 Buffer 都是缓存,主要区别是什么?【转】

974
来自专栏1001482的专栏

从 0 到 1 打造轻量级图像识别服务框架

在这个AI时代,图像识别技术作为其基础能力之一,也在快速发展中,今天来聊聊图像识别的服务运行框架。

2.6K2
来自专栏美团技术团队

人工智能在线特征系统中的生产调度

前言 在上篇博客《人工智能在线特征系统中的数据存取技术》中,我们围绕着在线特征系统存储与读取这两方面话题,针对具体场景介绍了一些通用技术,此外特征系统还有另一个...

35510
来自专栏鹅厂网事

可视化网络路径探测HashTrace

引子 长期以来,探究网络质量和探索网络路径是广大网络工作者监控网络的必备工作,ping用于探究网络质量和traceroute用于探索路径。对于探测结果似...

2438
来自专栏腾讯技术工程官方号的专栏

数平精准推荐 | OCR技术之系统篇

4775
来自专栏杨建荣的学习笔记

关于大数据和数据库的讨论(r5笔记第30天)

前几天上了水木社区,发现还是有大牛的,看了关于大数据和数据库的讨论,还是蛮有意思的,限于篇幅和版面,我做了部分的提取和整理。 先看看这位人士的分析,对于行业的现...

3926
来自专栏SDNLAB

DPI深度报文检测架构及关键技术实现

当前DPI(Deep Packet Inspect深度报文识别)技术是安全领域的关键技术点之一,围绕DPI技术衍生出的安全产品类型也非常的多样。在分析DPI的进...

3938
来自专栏贾老师の博客

游戏中的网络同步

1494
来自专栏程序你好

在云中部署机器学习模型

对于软件开发,有许多方法、模式和技术用于构建、部署和运行应用程序。DevOps是一种以软件开发和操作的整体观点来描述软件工程文化的艺术方法论。

722

扫描关注云+社区