찾다
데이터 베이스MySQL 튜토리얼【Oracle Database 12c New Feature】In-Memory Column

Oracle发布的Database 12c最新版本12.1.0.2中正式引入了IMCS(列式内存)功能,正是在刚发布的时候被称为In-Memory Database Option的选件。 到底什么是IMCS?跟SAP HANA不一样吗? IMCS是SGA中的一块新的独立区域,就跟众所周知的Buffer Cache或者Shared Po

Oracle发布的Database 12c最新版本12.1.0.2中正式引入了IMCS(列式内存)功能,正是在刚发布的时候被称为In-Memory Database Option的选件。

到底什么是IMCS?跟SAP HANA不一样吗?

IMCS是SGA中的一块新的独立区域,就跟众所周知的Buffer Cache或者Shared Pool一样,IMCS更接近于Buffer Cache,就是缓存表或者表分区或者物化视图中的数据的,但是不同的地方是在IMCS中缓存的数据格式并不是按照传统的行方式,而是按照列方式来缓存的。更简单地说,现在Oracle数据库在内存中既可以缓存行式数据也可以缓存列式数据了,但是在磁盘中存储的始终只有一份行式数据,这是Oracle IMCS与SAP HANA或者Sybase IQ等列式内存数据库截然不同的地方。 Screen Shot 2014-09-16 at 8.45.35 AM

Oracle在磁盘中始终只有一份行式数据,只是在缓存到内存中的时候,可以选择附加一份列式缓存。请注意,这里提及的“附加”一词,意味着,Oracle数据库以前的所有行为都没有发生变化,应该缓存到Buffer Cache(传统的行式缓存)中的还是会缓存到Buffer Cache中,只是如果设置了某张表也需要一份列式缓存,那么Oracle会额外维护一份该表的列式数据,这份数据就是存在SGA的新区域In-Memory Area中。这份数据只会保存在内存中,一旦数据库实例重启,这部分内存会重新加载(按照不同的设置,可以是一启动就立刻加载,也可以使用到再加载)。

Oracle需要保证效率的地方是当大量的DML产生时,额外的这部分列式缓存如何高效地保持更新和同步,特别是在RAC环境中更会是一个挑战,Oracle并没有透露更多关于这方面的信息,所有一切唯有等待真正应用的测试。

本文主要通过解释跟IMCS相关的数据库初始化参数,来介绍其中的知识。包括隐含参数,总共有115个参数跟inmemory相关(wow!)。

SQL> @p "inmemory"
 
NAME                                                         VALUE
------------------------------------------------------------ ----------------------------------------
_inmemory_check_prot_meta                                    FALSE
_inmemory_private_journal_quota                              100
_inmemory_private_journal_sharedpool_quota                   20
_inmemory_private_journal_numbkts                            512
_inmemory_private_journal_numgran                            128
_inmemory_jscan                                              0
_inmemory_pin_hist_mode                                      16
_inmemory_txn_checksum                                       0
_inmemory_buffer_waittime                                    100
_inmemory_cu_timeout                                         100
_inmemory_cudrop_timeout                                     1000
_inmemory_exclto_timeout                                     1000
_inmemory_num_hash_latches                                   256
_inmemory_strdlxid_timeout                                   0
_inmemory_incremental_repopulation                           FALSE
_inmemory_lock_for_smucreate                                 FALSE
_inmemory_auto_distribute                                    TRUE
_inmemory_autodist_2safe                                     FALSE
_inmemory_distribute_timeout                                 300
_inmemory_distribute_ondemand_timeout                        300
inmemory_size                                                218103808
_inmemory_64k_percent                                        30
_inmemory_min_ima_defersize                                  0
_inmemory_memprot                                            TRUE
_inmemory_analyzer_optimize_for                              0
_inmemory_default_flags                                      8459
_inmemory_default_new                                        FALSE
inmemory_clause_default
inmemory_force                                               DEFAULT
inmemory_query                                               ENABLE
_inmemory_query_scan                                         TRUE
_inmemory_scan_override                                      FALSE
_inmemory_scan_threshold_percent_noscan                      50
_inmemory_small_segment_threshold                            65536
_inmemory_query_fetch_by_rowid                               FALSE
_inmemory_pruning                                            ON
_inmemory_enable_sys                                         FALSE
_inmemory_populate_fg                                        FALSE
_inmemory_pga_per_server                                     536870912
inmemory_max_populate_servers                                1
_inmemory_servers_throttle_pgalim_percent                    55
inmemory_trickle_repopulate_servers_percent                  1
_inmemory_populate_wait                                      FALSE
_inmemory_populate_wait_max                                  600
_inmemory_imco_cycle                                         120
_inmemory_enable_population_verify                           1
_inmemory_log_level                                          1
_inmemory_fs_verify                                          FALSE
_inmemory_force_fs                                           FALSE
_inmemory_force_fs_tbs                                       SYSAUX
_inmemory_force_fs_tbs_size                                  1073741824
_inmemory_fs_raise_error                                     FALSE
_inmemory_fs_nodml                                           FALSE
_inmemory_fs_enable                                          FALSE
_inmemory_fs_enable_blk_lvl_inv                              TRUE
_inmemory_fs_blk_inv_blkcnt
_inmemory_fs_blk_inv_blk_percent                             20
_inmemory_enable_stat_alert                                  FALSE
_inmemory_imcu_align                                         TRUE
_inmemory_max_populate_retry                                 3
_inmemory_imcu_target_rows                                   1048576
_inmemory_imcu_target_bytes                                  0
_inmemory_imcu_source_extents                                0
_inmemory_imcu_source_blocks                                 0
_inmemory_imcu_source_minbytes                               1048576
_inmemory_imcu_populate_minbytes                             5242880
_inmemory_imcu_source_analyze_bytes                          134217728
_inmemory_imcu_target_maxrows                                8388608
_inmemory_imcu_source_maxbytes                               536870912
_inmemory_max_queued_tasks                                   208
_inmemory_repopulate_threshold_rows
_inmemory_repopulate_threshold_blocks
_inmemory_pct_inv_rows_invalidate_imcu                       50
_inmemory_pct_inv_blocks_invalidate_imcu                     100
_inmemory_repopulate_threshold_mintime_factor                5
_inmemory_repopulate_threshold_mintime                       0
_inmemory_repopulate_threshold_scans                         0
_inmemory_repopulate_priority_scale_factor                   100
_inmemory_repopulate_invalidate_rate_percent                 100
_inmemory_repopulate_priority_threshold_row                  20
_inmemory_repopulate_priority_threshold_block                40
_inmemory_repopulate_threshold_rows_percent                  5
_inmemory_repopulate_threshold_blocks_percent                10
_inmemory_repopulate_disable                                 FALSE
_inmemory_check_protect                                      FALSE
_inmemory_checksum                                           FALSE
_inmemory_validate_fetch                                     FALSE
_inmemory_journal_row_logging                                FALSE
_inmemory_journal_check                                      0
_inmemory_rows_check_interrupt                               1000
_inmemory_dbg_scan                                           0
_inmemory_segment_populate_verify                            0
_inmemory_query_check                                        0
_inmemory_test_verification                                  0
_inmemory_invalidate_cursors                                 TRUE
_inmemory_prepopulate_fg                                     0
_inmemory_prepopulate                                        TRUE
_inmemory_trickle_repopulate                                 TRUE
_inmemory_trickle_repopulate_threshold_dirty_ratio           0
_inmemory_trickle_repopulate_min_interval                    300
_inmemory_trickle_repopulate_fg                              0
_inmemory_force_non_engineered                               FALSE
_inmemory_suppress_vsga_ima                                  FALSE
optimizer_inmemory_aware                                     TRUE
_optimizer_inmemory_table_expansion                          TRUE
_optimizer_inmemory_gen_pushable_preds                       TRUE
_optimizer_inmemory_autodop                                  TRUE
_optimizer_inmemory_access_path                              TRUE
_optimizer_inmemory_quotient                                 0
_optimizer_inmemory_pruning_ratio_rows                       100
_parallel_inmemory_min_time_threshold                        AUTO
_parallel_inmemory_time_unit                                 1
_optimizer_inmemory_bloom_filter                             TRUE
_optimizer_inmemory_cluster_aware_dop                        TRUE
_optimizer_inmemory_minmax_pruning                           TRUE
 
115 ROWS selected.

先将注意力放在非隐含参数上,总共是7个参数(Phew!)。

SQL> SHOW parameter inmemory
 
NAME                                               TYPE        VALUE
-------------------------------------------------- ----------- --------------------------------------------------
inmemory_clause_default                            string
inmemory_force                                     string      DEFAULT
inmemory_max_populate_servers                      INTEGER     1
inmemory_query                                     string      ENABLE
inmemory_size                                      big INTEGER 208M
inmemory_trickle_repopulate_servers_percent        INTEGER     1
optimizer_inmemory_aware                           BOOLEAN     TRUE

inmemory_clause_default

该参数主要设置IMCS的一些默认参数值,这些默认值在今后为新的表或者分区设置IMCS时会自动参考。该参数默认值为空,表示除非在建表时明确指定要使用IMCS,否则不会将表缓存到列式内存中。该参数的设置可选项包括:

NO INMEMORY:与默认值效果一样,除非在建表时明确指定要使用IMCS,否则不会将表缓存到列式内存中。

INMEMORY:表示默认建表时就会使用IMCS,除非建表时明确指定“NO INMEMORY”。如果设置为该值,就可以继续设置如下这些其它的IMCS参数值。

NO MEMCOMPRESS | MEMCOMPRESS FOR { DML | QUERY [ LOW | HIGH ] | CAPACITY [LOW | HIGH] }: 表示在IMCS中缓存的列式数据是否需要压缩,如果压缩,采取何种压缩模式。

PRIORITY { NONE | LOW | MEDIUM | HIGH | CRITICAL }:优先级表示Oracle将表数据加载到列存中的积极性,Oracle会最优先考虑CRITICAL级别的加载,最后才进行NONE级别的加载。要知道内存毕竟是有限的,因此将那些必须要缓存到列存中的表设置为CRITICAL是更好的选择。

DISTRIBUTE [ AUTO | BY ROWID RANGE | BY PARTITION | BY SUBPARTITION ]:该参数只对RAC环境有效,指定IMCS中的数据在RAC环境多个节点的内存中如何分布。分别表示自动|按照ROWID范围|按照分区|按照子分区等方式在多个节点内存中缓存数据。

NO DUPLICATE | DUPLICATE [ ALL ]:该参数只对RAC环境有效,指定IMCS中的数据在RAC环境多个节点中是否要镜像。默认为NO DUPLICATE,也就是一份数据只会在多个节点中维护一份缓存,DUPLICATE表示维护两份相同的缓存,而DUPLICATE ALL则表示在所有节点内存中都维护一份相同的缓存。注意:在非Oracle工程系统(比如Exadata)中,只能是NO DUPLICATE效果,即使设置了DUPLICATE也不生效。

示例命令:

ALTER system SET
INMEMORY_CLAUSE_DEFAULT='INMEMORY MEMCOMPRESS FOR CAPACITY HIGH'
scope=BOTH;

inmemory_force

INMEMORY_FORCE = { DEFAULT | OFF } 当设置为默认值DEFAULT时,明确指定了INMEMORY的表和物化视图会缓存到IMCS中;如果设置为OFF,则表示全局禁用IMCS,意味着即使在表和物化视图上指定了INMEMORY,也不会缓存到In-Memory Area中。可以看到,这个参数没有提供全局打开IMCS的选项。

inmemory_max_populate_servers

该参数定义后台启动的用于将表数据加载至In-Memory Area区域中的进程个数,根据文档描述,该参数默认值是min(一般的CPU核数,PGA_AGGREGATE_TARGET/512),当inmemory_size=0的时候(也就是没有设置In-Memory Area大小的时候),该参数值为0,一旦设置了inmemory_size,该参数会根据上述算法自动设置。 如果该参数为0,则没有后台进程加载数据,表现为V$INMEMORY_AREA视图中的POPULATE_STATUS列始终为POPULATING。 Oracle建议该参数值不能设置过高,否则将导致CPU资源消耗严重。

inmemory_query

该参数用于在SYSTEM级别或者SESSIOn级别指定是否要启动inmemory查询,当设置了inmemory_size之后,该值默认会设置未ENABLE。 该参数可以在会话级别设置,临时启用或者禁用inmemory查询,用以比较两者之间的性能差距。一旦禁用,则即使相应表已经被缓存到In-Memory Area中,Oracle也不会选择扫描该区域。

inmemory_size

该参数用于指定In-Memory Area的大小,默认值为0,意味着默认没有启用IMCS。如同其他的内存相关参数,修改了此参数以后需要重新启动数据库实例才可以生效。该参数最小需要设置为100MB。在多租户环境中,如果是在PDB级别设置了该参数,则表明该PDB可以使用到的最大IMCS,但是注意的是多个PDB的该参数值的总和未必一定要等于在CDB级别的设置,甚至可以超越CDB级别的值。如果没有在PDB级别设置,那么所有PDB都会继承CDB上的该参数值,意味着所有PDB都可以用到所有可用的IMCS。 由于IMCS是列式存储,并且具有强大的压缩功能,因此即使准备将整个数据库的表都缓存到IMCS中,也无需特别大的内存空间。万一内存空间不够,表数据无法缓存到IMCS中,在V$INMEMORY_AREA.POPULATE_STATUS字段中可以发现“OUT OF MEMORY”字样。 实际上在绝大多数情况下,启用IMCS只需要设置这一个初始化参数即可,设置足够大的内存空间,然后尽情地Cache那些想缓存的表吧。

inmemory_trickle_repopulate_servers_percent

该参数定义后台用于重新加载IMCS中数据的进程负载,该参数值是一个相对于inmemory_max_populate_servers参数值的百分比。举例说,如果inmemory_max_populate_servers=10,而inmemory_trickle_repopulate_servers_percent=5,则意味着有10*0.05=0.5个进程会负责重新加载。什么是0.5个进程,实际上就是重新加载数据的进程负载最多占据一颗CPU的50%。 该参数默认值为1,在大多数场合都是适用的。

optimizer_inmemory_aware

该参数用于限制Oracle优化器对于inmemory功能的感知,默认值为TRUE,如果将该参数修改为FALSE,则Oracle优化器不会考虑使用IMCS,等同于设置OPTIMIZER_FEATURES_ENABLE小于12.1.0.2。

Share/Save

Related posts:

  1. Oracle 11g new feature – Virtual Column
  2. 【Oracle Database 12c New Feature】How to Learn Oracle (12c New Feature) from Error
  3. 【Oracle Database 12c New Feature】Advanced Security – Oracle Data Redaction
YARPP
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
什么是oracle asm什么是oracle asmApr 18, 2022 pm 04:16 PM

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

oracle怎么查询所有索引oracle怎么查询所有索引May 13, 2022 pm 05:23 PM

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

oracle全角怎么转半角oracle全角怎么转半角May 13, 2022 pm 03:21 PM

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

Oracle怎么查询端口号Oracle怎么查询端口号May 13, 2022 am 10:10 AM

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

oracle怎么删除sequenceoracle怎么删除sequenceMay 13, 2022 pm 03:35 PM

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

oracle怎么查询数据类型oracle怎么查询数据类型May 13, 2022 pm 04:19 PM

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

oracle查询怎么不区分大小写oracle查询怎么不区分大小写May 10, 2022 pm 05:45 PM

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

Oracle怎么修改sessionOracle怎么修改sessionMay 13, 2022 pm 05:06 PM

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기