本文主要介绍Oracle In-Memory 选件,Oracle在12.1.0.2就已经推出了In-Memory这个选件,现在通常会建议所有使用19.8及之后版本的用户,有条件都要留给In-memory一点内存区域。

因为该选件在19.8之后推出了16GB及以下免费使用的福利,作为优化的又一利器。

1.如何开启

只需要最简单的inmemory_size参数设置。

如果是第一次设置这个参数,需要重启生效。我这里测试环境,假设设置8GB的In-Memory:

SQL> alter system set inmemory_size=8G scope=spfile;
System altered. SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup
ORACLE instance started. Total System Global Area 2.5367E+10 bytes
Fixed Size 18608792 bytes
Variable Size 2248146944 bytes
Database Buffers 1.4496E+10 bytes
Redo Buffers 14942208 bytes
In-Memory Area 8589934592 bytes <--- 这里重新启动实例后,可以看到In-Memory的内存区域已经按照我们的设置开辟。
Database mounted.
Database opened. SQL> show parameter inmemory_size NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
inmemory_size big integer 8G

2.测试效果

以一张我测试环境中的一张大表L(数据量50M,占空间5G+)来举例说明。

SQL> select round(bytes/1024/1024/1024,2) "GB" from user_segments where segment_name = 'L';

        GB
----------
5.38 --将该表设置为inmemory:
SQL> alter table L inmemory; --如果最终想去掉该表的inmemory设置,即设置为no inmemory:
SQL> alter table L no inmemory;

使用最简单的测试SQL用例:

vi select.sql

select count(*) from L;

vi select2.sql

select /*+ no_inmemory */ count(*) from L;

vi xplan.sql

set lines 200 pages 200
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

下面测试中开启计时。

执行前面已执行过的语句(确保都在内存区域中),然后对比二者性能差异,并查看执行计划确认;

SQL> set timing on
SQL> @select COUNT(*)
----------
53986608 Elapsed: 00:00:00.02 <---瞬间出结果,仅需0.02s!
SQL> @xplan PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID 38aj72xpvgqfv, child number 1
-------------------------------------
select count(*) from L Plan hash value: 1622156267 ----------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.02 | 13 |
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.02 | 13 |
| 2 | TABLE ACCESS INMEMORY FULL| L | 1 | 53M| 53M|00:00:00.02 | 13 | <--- 这里唯一区别是有`INMEMORY`关键字。
---------------------------------------------------------------------------------------------- 14 rows selected. Elapsed: 00:00:00.03
SQL> @select2 COUNT(*)
----------
53986608 Elapsed: 00:00:02.22 <---即便多次反复查询,也都至少需要2s以上才能出结果。
SQL> @xplan PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID 2t6ccax38rrgt, child number 0
-------------------------------------
select /*+ no_inmemory */ count(*) from L Plan hash value: 1622156267 <--- 注意这里的Plan hash value和上面是一致的。 ----------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:02.23 | 697K| 697K|
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:02.23 | 697K| 697K|
| 2 | TABLE ACCESS FULL| L | 1 | 53M| 53M|00:00:02.18 | 697K| 697K| <--- 只是这里没有了`INMEMORY`关键字。
---------------------------------------------------------------------------------------------- 14 rows selected. Elapsed: 00:00:00.03
SQL>

上面简单对比了同样在内存中,计算count(*)这类统计操作,普通buffer cache与In-Memory的性能差异。

抛砖引玉,感兴趣的话快在自己的测试环境试试效果吧!

优化利器In-Memory开启和效果的更多相关文章

  1. mysql优化一 之 优化内容概述及开启慢查日志的相关配置

    1-1数据库优化的目的 首先是为了避免出现页面访问错误(基本有三种) (1)由于数据库连接timeout产生的页面5XX错误 (2)由于慢查询造成页面无法加载 (3)由于阻塞造成的数据无法提交 其次: ...

  2. 【转】PHP中被忽略的性能优化利器:生成器.md

      PHP  如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生.但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明 ...

  3. CUDA02 - 访存优化和Unified Memory

    CUDA02 - 的内存调度与优化 前面一篇(传送门)简单介绍了CUDA的底层架构和一些线程调度方面的问题,但这只是整个CUDA的第一步,下一个问题在于数据的访存:包括数据以何种形式在CPU/GPU之 ...

  4. UIWrapContent(NGUI长列表优化利器)

    NGUI长列表优化利器 优化原理 NGUI3.7.x以上版本 有个新组件 UIWrapContent ,当我们的列表内容很多时,可以进行优化.它不是一次生成全部的child,而是只有固定数量的chil ...

  5. Mysql优化_慢查询开启说明及Mysql慢查询分析工具mysqldumpslow用法讲解

    Mysql优化_慢查询开启说明及Mysql慢查询分析工具mysqldumpslow用法讲解   Mysql慢查询开启 Mysql的查询讯日志是Mysql提供的一种日志记录,它用来记录在Mysql中响应 ...

  6. QQ2010如何开启透明效果皮肤

    QQ2010可在WIN7下实现皮肤透明效果. 腾讯已于近日发布了QQ2010的BETA版本,经笔者试验,可在WIN7下实现皮肤透明化效果. 设置如下: 1.先打开QQ皮肤控制面板,如下: 2.然后任选 ...

  7. 开源|性能优化利器:数据库审核平台Themis的选型与实践

    作者:韩锋 出处:DBAplus社群分享:来源:宜信技术学院 Themis开源地址:https://github.com/CreditEaseDBA 一.面临的挑战 1.运维规模及种类 我相信,这也是 ...

  8. 网站优化之PHPCMS如何开启伪静态

    做为一名网站优化方面的工作,那么选择CMS系统的时候,有良好的网站优化功能就是一个好的CMS的标准之一,而系统是否支持伪静态,则是URL优化的工作之一,而PHPCMS是一款网站优化方面做得比较成功的C ...

  9. 简单谈谈MySQL优化利器-慢查询

    慢查询 首先,无论进行何种优化,开启慢查询都算是前置条件.慢查询机制,将记录过慢的查询语句(事件),从而为DB维护人员提供优化目标. 检查慢查询是否开启 通过show variables like ' ...

  10. URL优化之IIS7如何开启伪静态

    iis7跟IIS6开启伪静态重写的方式不一样,iis6是在网站属性里面的ISAPI筛选器里面添加,但是iis7添加伪静态重写,需要下载一个url重写插件. II7/7.5用的是web.config配置 ...

随机推荐

  1. 大数据(3)---HDFS客户端命令及java连接

    一.参数设置 之前有说到HDFS的备份数量和切块大小都是可以配置的,默认是备份3,切块大小默认128M 文件的切块大小和存储的副本数量,都是由客户端决定! 所谓的由客户端决定,是通过客户端机器上面的配 ...

  2. Vue中使用el-menu高亮显示问题

    https://blog.csdn.net/weixin_43336525/article/details/132541500 <template> <el-menu :defaul ...

  3. vue计算属性computed传参

    需求:根据不同的状态status,显示不同颜色的边框

  4. Jensen 不等式证明

    Jensen 不等式定义 若 \(f(x)\) 为区间 \(I\) 上的下凸函数,则对于任意 \(x_{i} \in I\) 和满足 \(\displaystyle\sum_{i=1}^{n} \la ...

  5. 运筹学 | 退化的最优解 vs 无穷多最优解?

    退化的最优解: 单纯形表的基可行解中,出现等于零的基变量.或者,按最小比值来确定出基向量时,存在两个以上相同最小比值. 出现的原因:模型中存在多余的约束. 无穷多最优解: 单纯形表中,按最大检验数 σ ...

  6. Oracle实例的启动和关闭

    启动模式 1.NoMount 模式(启动实例不加载数据库) 命令:startup nomount 讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打 ...

  7. 【译】Visual Studio 2013 退役 :旧版本 Visual Studio 的支持提醒

    新年到了,也是提醒我们 Visual Studio 支持生命周期中即将到来的日期的好时机.对 Visual Studio 2013 的支持将于今年4月9日结束.如果您使用的是旧版本的Visual St ...

  8. 【TouchGFX】visua studio 自定义路径宏

    很好奇 touchgfx 的 visual studio 工程文件中路径符号 $(TouchGFXReleasePath)是哪里定义的,经查这就是一个宏替换 自定义宏方式  

  9. (保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

    前言 近期在琢磨Zabbix邮箱报警的功能,但是网上的教程通常是4.0或5.0版本Zabbix,并使用Python2.7环境,运行在新版本Zabbix6.0上有颇多问题,为此我基于原先教程修改基于Za ...

  10. [转帖]/etc/security/limits.conf 详解与配置

    https://www.cnblogs.com/operationhome/p/11966041.html 一. /etc/security/limits.conf 详解 /etc/security/ ...