本文主要介绍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. 【驱动】SPI驱动分析(四)-关键API解析

    关键API 设备树 设备树解析 我们以Firefly 的SPI demo 分析下dts中对spi的描述: /* Firefly SPI demo */ &spi1 { spi_demo: sp ...

  2. Element-ui 之 form表单套数组、表单数组套数组的校验rules

    https://blog.csdn.net/qq_61553794/article/details/135451461

  3. vue.js从输入中的contenteditable元素获取innerhtml

    <div class="actual-score" :contenteditable="$route.params.mode === 'edit'" v- ...

  4. python常见面试题讲解(三)明明的随机数

    题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对 ...

  5. Linux-运行级别-init

  6. [转帖]idea配置tomcat参数,防止nvarchar保存韩文、俄文、日文等乱码

    描述下我的场景: 数据库服务器在远程机器上,数据库使用的Oracle,字符集是ZHS16GBK,但保存韩文.俄文.日文等字段A的数据类型是nvarchar(120),而nvarchar使用的是Unic ...

  7. [转帖]TiDB-merge region相关问题

    一.开启region merge # 控制 Region Merge 的 size 上限,当 Region Size 大于指定值时 PD 不会将其与相邻的 Region 合并 pd-ctl confi ...

  8. [转帖]Linux—解压缩命令总结(tar/zip)

    https://www.jianshu.com/p/1ad5d852d13b 1 tar 1.2 tar介绍   tar命令是linux系统中对文件和目录解压缩命令.tar命令可以用于对后缀名为.ta ...

  9. [转帖]总结:Springboot监控Actuator相关

    一.介绍 由于项目中使用的仍然是比较老旧的1.5.6版本,所以本文是基于此版本进行描述. 二.Actuator使用 ActuatorActuator是Spring Boot提供的对应用系统的监控和管理 ...

  10. 自己想的一些判断存储长度的sql

    create table zhaobsh (t1 date ,t2 TIMESTAMP) insert into zhaobsh values (CURRENT_DATE,CURRENT_TIMEST ...