本文主要介绍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. 【体验有奖】玩转 AIGC,函数计算 x 通义千问预体验,一键部署AI应用赢Airpods

    玩转 AIGC,基于函数计算 FC 部署通义千问预体验 从文字生成到图片生成,AIGC 的创造力让人惊叹,更多的人开始探索如何使用 AI 提高生产效率,激发更多创作潜能,然而在实际应用中,AI 技术的 ...

  2. iviews Radio组件如何获取key而不是value

    iviews RadioGroup 官网里介绍Radio组件获取的值都是name属性没有value 例如: <template> <Space wrap size="lar ...

  3. STM32CubeMX教程20 SPI - W25Q128驱动

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm ...

  4. Python毕业设计推荐

    今天给大家推荐几个基于python/django的毕业设计/课程设计. 1. 网上商城系统 这是一个基于python+vue开发的商城网站,平台采用B/S结构,后端采用主流的Python语言进行开发, ...

  5. c# 创建一个只接收消息的窗口

    /// <summary> /// WM_COPYDATA消息,进程间传输信息专用结构 /// </summary> public struct COPYDATASTRUCT ...

  6. NodeJS安装指南(Mac)

    nvm,node,npm之间的区别 nvm:nodejs 版本管理工具. 也就是说:一个 nvm 可以管理很多 node 版本和 npm 版本. nodejs:在项目开发时的所需要的代码库 npm:n ...

  7. 【深入解读Redis系列】(五)Redis中String的认知误区,详解String数据类型

    有时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,请认准https://blog.zysicyj.top 首发博客地址 系列文章地址 需求描述 现在假设有这样一个需求,我们要开发一个 ...

  8. JVM的GC学习

    JVM的GC学习 2023-12-28T17:20:25.182+0800: 7.363: [Full GC (Metadata GC Threshold) [PSYoungGen: 29067K-& ...

  9. [转帖]详解:Linux Chrony 设置服务器集群同步时间

    https://www.linuxprobe.com/centos7-chrony-time.html 导读 Chrony是一个开源的自由软件,像CentOS 7或基于RHEL 7操作系统,已经是默认 ...

  10. [转帖]Linux shell 单引号和双引号

    https://www.cnblogs.com/airoot/p/15324883.html 在编写shell脚本的时候经常会用到引号,有些时候却老是忘记单引号和双引号之间的区别,所以就整理一下供以后 ...