목차
到底什么是IMCS?跟SAP HANA不一样吗?
inmemory_clause_default
inmemory_force
inmemory_max_populate_servers
inmemory_query
inmemory_size
inmemory_trickle_repopulate_servers_percent
optimizer_inmemory_aware
데이터 베이스 MySQL 튜토리얼 【Oracle Database 12c New Feature】In-Memory Column

【Oracle Database 12c New Feature】In-Memory Column

Jun 07, 2016 pm 04:38 PM
database new oracle

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으로 문의하세요.

핫 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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

오라클을 열 수 없다면해야 할 일 오라클을 열 수 없다면해야 할 일 Apr 11, 2025 pm 10:06 PM

Oracle에 대한 솔루션은 개설 할 수 없습니다. 1. 데이터베이스 서비스 시작; 2. 청취자를 시작하십시오. 3. 포트 충돌을 확인하십시오. 4. 환경 변수를 올바르게 설정하십시오. 5. 방화벽이나 바이러스 백신 소프트웨어가 연결을 차단하지 않도록하십시오. 6. 서버가 닫혀 있는지 확인하십시오. 7. RMAN을 사용하여 손상된 파일을 복구하십시오. 8. TNS 서비스 이름이 올바른지 확인하십시오. 9. 네트워크 연결 확인; 10. Oracle 소프트웨어를 다시 설치하십시오.

Oracle에서 모든 데이터를 삭제하는 방법 Oracle에서 모든 데이터를 삭제하는 방법 Apr 11, 2025 pm 08:36 PM

Oracle에서 모든 데이터를 삭제하려면 다음 단계가 필요합니다. 1. 연결 설정; 2. 외국의 주요 제약을 비활성화합니다. 3. 테이블 데이터 삭제; 4. 거래 제출; 5. 외국 키 제약 조건을 활성화합니다 (선택 사항). 데이터 손실을 방지하려면 실행하기 전에 데이터베이스를 백업하십시오.

Oracle Cursor를 닫는 문제를 해결하는 방법 Oracle Cursor를 닫는 문제를 해결하는 방법 Apr 11, 2025 pm 10:18 PM

Oracle Cursor Closure 문제를 해결하는 방법에는 다음이 포함됩니다. Close 문을 사용하여 커서를 명시 적으로 닫습니다. For Update 절에서 커서를 선언하여 범위가 종료 된 후 자동으로 닫히십시오. 연관된 PL/SQL 변수가 닫히면 자동으로 닫히도록 사용 절에서 커서를 선언하십시오. 예외 처리를 사용하여 예외 상황에서 커서가 닫혀 있는지 확인하십시오. 연결 풀을 사용하여 커서를 자동으로 닫습니다. 자동 제출을 비활성화하고 커서 닫기를 지연시킵니다.

Oracle Loop에서 커서를 만드는 방법 Oracle Loop에서 커서를 만드는 방법 Apr 12, 2025 am 06:18 AM

Oracle에서 FOR 루프 루프는 커서를 동적으로 생성 할 수 있습니다. 단계는 다음과 같습니다. 1. 커서 유형을 정의합니다. 2. 루프를 만듭니다. 3. 커서를 동적으로 만듭니다. 4. 커서를 실행하십시오. 5. 커서를 닫습니다. 예 : 커서는 상위 10 명의 직원의 이름과 급여를 표시하기 위해주기별로 만들 수 있습니다.

Oracle 데이터베이스를 이끄는 방법 Oracle 데이터베이스를 이끄는 방법 Apr 11, 2025 pm 08:42 PM

Oracle 데이터베이스 페이징은 rownum pseudo-columns 또는 fetch 문을 사용하여 구현합니다. Fetch 문은 지정된 첫 번째 행 수를 얻는 데 사용되며 간단한 쿼리에 적합합니다.

Oracle 데이터베이스를 중지하는 방법 Oracle 데이터베이스를 중지하는 방법 Apr 12, 2025 am 06:12 AM

Oracle 데이터베이스를 중지하려면 다음 단계를 수행하십시오. 1. 데이터베이스에 연결하십시오. 2. 즉시 종료; 3. 셧다운은 완전히 중단됩니다.

Oracle Dynamic SQL을 만드는 방법 Oracle Dynamic SQL을 만드는 방법 Apr 12, 2025 am 06:06 AM

SQL 문은 Oracle의 동적 SQL을 사용하여 런타임 입력을 기반으로 작성 및 실행할 수 있습니다. 단계에는 다음이 포함됩니다 : 동적으로 생성 된 SQL 문을 저장할 빈 문자열 변수 준비. 즉시 실행 또는 준비 명령문을 사용하여 동적 SQL 문을 컴파일하고 실행하십시오. 바인드 변수를 사용하여 사용자 입력 또는 기타 동적 값을 동적 SQL로 전달하십시오. 동적 SQL 문을 실행하려면 즉시 실행 또는 실행을 사용하십시오.

HDFS에서 CentOS를 구성하는 데 어떤 단계가 필요합니까? HDFS에서 CentOS를 구성하는 데 어떤 단계가 필요합니까? Apr 14, 2025 pm 06:42 PM

Centos 시스템에서 Hadoop 분산 파일 시스템 (HDF)을 구축하려면 여러 단계가 필요합니다. 이 기사는 간단한 구성 안내서를 제공합니다. 1. 초기 단계에서 JDK를 설치할 준비 : 모든 노드에 JavadevelopmentKit (JDK)을 설치하면 버전이 Hadoop과 호환되어야합니다. 설치 패키지는 Oracle 공식 웹 사이트에서 다운로드 할 수 있습니다. 환경 변수 구성 : /etc /프로파일 파일 편집, Java 및 Hadoop 설정 설정 시스템에서 JDK 및 Hadoop의 설치 경로를 찾을 수 있습니다. 2. 보안 구성 : SSH 비밀번호가없는 로그인 SSH 키 : 각 노드에서 ssh-keygen 명령을 사용하십시오.

See all articles