Persistence Tuning

03/02/2023

Adjusting Page Size

DataStorageConfiguration.pageSize parametresi, depolama ortamฤฑnฤฑn (SSD, Flash, HDD vb.) sayfa boyutundan ve iลŸletim sisteminin cacge sayfa boyutundan kรผรงรผk olmamalฤฑdฤฑr. Varsayฤฑlan deฤŸer 4KB'dir.

ฤฐลŸletim sisteminin cache sayfasฤฑ boyutu, sistem araรงlarฤฑ ve parametreleri kullanฤฑlarak kolayca kontrol edilebilir.

SSD gibi bir depolama aygฤฑtฤฑnฤฑn sayfa boyutu genellikle aygฤฑt รถzelliklerinde belirtilir. รœretici bu bilgiyi aรงฤฑklamazsa, sayฤฑyฤฑ bulmak iรงin SSD benchmarklarฤฑna bakฤฑlabilir. Birรงok รผretici, sรผrรผcรผlerini 4KB random-write iลŸ yรผklerine uyarlamak zorundadฤฑr, รงรผnkรผ รงeลŸitli standart benchmarklar varsayฤฑlan olarak 4KB kullanฤฑr. Intel'den gelen bu yazฤฑarrow-up-right, 4KB'nin yeterli olmasฤฑ gerektiฤŸini doฤŸrulamaktadฤฑr.

En uygun sayfa boyutunu seรงtikten sonra, bunu cluster konfigรผrasyonuna uygulayฤฑn:

chevron-rightโŒจ๏ธ XML Config;hashtag
<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       <http://www.apache.org/licenses/LICENSE-2.0>

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<beans xmlns="<http://www.springframework.org/schema/beans>" xmlns:util="<http://www.springframework.org/schema/util>" xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>" xsi:schemaLocation="         <http://www.springframework.org/schema/beans>         <http://www.springframework.org/schema/beans/spring-beans.xsd>         <http://www.springframework.org/schema/util>         <http://www.springframework.org/schema/util/spring-util.xsd>">
    <bean class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="dataStorageConfiguration">
            <bean class="org.apache.ignite.configuration.DataStorageConfiguration">

                <!-- Set the page size to 8 KB -->
                <property name="pageSize" value="#{8 * 1024}"/>
            </bean>
        </property>
    </bean>
</beans>
chevron-rightโŒจ๏ธ .NET Confighashtag
var cfg = new IgniteConfiguration
{
    DataStorageConfiguration = new DataStorageConfiguration
    {
        // Changing the page size to 4 KB.
        PageSize = 4096
    }
};

Keep WALs Separately

Veri dosyalarฤฑ ve Write Ahead Logging (WAL) iรงin ayrฤฑ sรผrรผcรผler kullanmayฤฑ dรผลŸรผnรผn. Ignite aktif olarak hem verilere hem de WAL dosyalarฤฑna yazar.

AลŸaฤŸฤฑdaki รถrnek, veri depolama, WAL ve WAL arลŸivi iรงin ayrฤฑ yollarฤฑn nasฤฑl yapฤฑlandฤฑrฤฑlacaฤŸฤฑnฤฑ gรถsterir:

chevron-rightโŒจ๏ธ XML Config;hashtag
<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       <http://www.apache.org/licenses/LICENSE-2.0>

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<beans xmlns="<http://www.springframework.org/schema/beans>" xmlns:util="<http://www.springframework.org/schema/util>" xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>" xsi:schemaLocation="         <http://www.springframework.org/schema/beans>         <http://www.springframework.org/schema/beans/spring-beans.xsd>         <http://www.springframework.org/schema/util>         <http://www.springframework.org/schema/util/spring-util.xsd>">
    <bean class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="dataStorageConfiguration">
            <bean class="org.apache.ignite.configuration.DataStorageConfiguration">

                <!--
                    Sets a path to the root directory where data and indexes are
                    to be persisted. It's assumed the directory is on a separated SSD.
                -->
                <property name="storagePath" value="/opt/persistence"/>
                <property name="walPath" value="/opt/wal"/>
                <property name="walArchivePath" value="/opt/wal-archive"/>
            </bean>
        </property>
    </bean>
</beans>
chevron-rightโŒจ๏ธ .NET Config;hashtag

Increasing WAL Segment Size

Varsayฤฑlan WAL segment boyutu (64 MB), WAL'ฤฑn segmentler arasฤฑnda รงok sฤฑk geรงiลŸ yapmasฤฑna neden olduฤŸundan ve switching/rotation maliyetli bir iลŸlem olduฤŸundan, yรผksek yรผk senaryolarฤฑnda verimsiz olabilir. Segment boyutunun daha yรผksek bir deฤŸere (2 GB'a kadar) ayarlanmasฤฑ switching iลŸlemlerinin sayฤฑsฤฑnฤฑ azaltmaya yardฤฑmcฤฑ olabilir. Ancak handikap, bunun WALโ€™ฤฑn toplam hacmini artฤฑracaฤŸฤฑ yรถnรผndedir.

Ayrฤฑntฤฑlar iรงin WAL Segment Boyutunu DeฤŸiลŸtirmearrow-up-right bรถlรผmรผne bakฤฑnฤฑz...

Changing WAL Mode

Varsayฤฑlan moda alternatif olarak diฤŸer WAL modlarฤฑnฤฑ gรถz รถnรผnde bulundurun. Her mod, dรผฤŸรผm arฤฑzasฤฑ durumunda farklฤฑ derecelerde gรผvenilirlik saฤŸlar ve bu derece hฤฑz ile ters orantฤฑlฤฑdฤฑr, yani WAL modu ne kadar gรผvenilirse, o kadar yavaลŸtฤฑr. Bu nedenle, kullanฤฑm durumunuz yรผksek gรผvenilirlik gerektirmiyorsa daha az gรผvenilir bir moda geรงebilirsiniz.

Daha fazla ayrฤฑntฤฑ iรงin WAL Modlarฤฑnaarrow-up-right bakฤฑnฤฑzโ€ฆ

Disabling WAL

WAL'ฤฑ devre dฤฑลŸฤฑ bฤฑrakmanฤฑnarrow-up-right performansฤฑ iyileลŸtirmeye yardฤฑmcฤฑ olabileceฤŸi durumlar vardฤฑr.

Pages Writes Throttling

Ignite, kirli sayfalarฤฑ bellekten diske eลŸitleyen checkpoint oluลŸturma sรผrecini dรผzenli aralฤฑklarla baลŸlatฤฑr. Kirli sayfa, RAM'de gรผncellenen ancak ilgili partition dosyasฤฑna yazฤฑlmamฤฑลŸ bir sayfadฤฑr (รถrn. bir gรผncelleme WAL'a yeni eklenmiลŸtir). Bu iลŸlem, uygulamanฤฑn mantฤฑฤŸฤฑnฤฑ etkilemeden arka planda gerรงekleลŸir.

Ancak, checkpoint iรงin zamanlanan kirli bir sayfa diske yazฤฑlmadan รถnce gรผncellenirse, รถnceki durumu checkpoint bugger adฤฑ verilen รถzel bir bรถlgeye kopyalanฤฑr. Buffer taลŸarsa, Ignite checkpointing bitene kadar tรผm gรผncellemeleri iลŸlemeyi durduracaktฤฑr. Sonuรง olarak, bu ลŸemada gรถsterildiฤŸi gibi, checkpoint dรถngรผsรผ tamamlanana kadar yazma performansฤฑ sฤฑfฤฑra dรผลŸebilir:

Checkpoint devam ederken kirli sayfalar tresholduna(eลŸiฤŸine) tekrar ulaลŸฤฑlฤฑrsa aynฤฑ durum oluลŸur. Bu, Ignite'ฤฑ bir checkpoint yรผrรผtmesi daha planlamaya ve ilk checkpoint dรถngรผsรผ bitene kadar tรผm gรผncelleme iลŸlemlerini durdurmaya zorlayacaktฤฑr.

Her iki durum da genellikle bir disk aygฤฑtฤฑ yavaลŸ olduฤŸunda veya gรผncelleme hฤฑzฤฑ รงok yoฤŸun olduฤŸunda ortaya รงฤฑkar. Bu performans dรผลŸรผลŸlerini azaltmak ve รถnlemek iรงin sayfalarฤฑn yazma kฤฑsฤฑtlama algoritmasฤฑnฤฑ(write throttling algorithm) etkinleลŸtirmeyi dรผลŸรผnรผn. Algoritma, checkpoint bufferโ€™ฤฑ รงok hฤฑzlฤฑ dolduฤŸunda veya kirli sayfalarฤฑn yรผzdesi hฤฑzla arttฤฑฤŸฤฑnda, gรผncelleme iลŸlemlerinin performansฤฑnฤฑ disk cihazฤฑnฤฑn hฤฑzฤฑna dรผลŸรผrรผr.

AลŸaฤŸฤฑdaki รถrnek, yazma kฤฑsฤฑtlamasฤฑnฤฑn(write throttling) nasฤฑl etkinleลŸtirileceฤŸini gรถsterir:

chevron-rightโŒจ๏ธ XML Config;hashtag
chevron-rightโŒจ๏ธ .NET Confighashtag

Adjusting Checkpointing Buffer Size

ร–nceki bรถlรผmde aรงฤฑklanan checkpoint buffer boyutu, checkpoint sรผreci tetikleyicilerinden biridir.

Varsayฤฑlan buffer boyutu, veri bรถlgesi(data region) boyutunun bir fonksiyonu olarak hesaplanฤฑr:

Varsayฤฑlan buffer boyutu, yazma aรงฤฑsฤฑndan yoฤŸun iลŸ yรผkleri iรงin yetersiz olabilir รงรผnkรผ sayfa write throttling algoritmasฤฑ, boyut kritik dรผzeye ulaลŸtฤฑฤŸฤฑnda yazma iลŸlemlerinizi yavaลŸlatacaktฤฑr. Checkpointing devam ederken yazma performansฤฑnฤฑ istenen hฤฑzda tutmak iรงin DataRegionConfiguration.checkpointPageBufferSize deฤŸerini artฤฑrmayฤฑ ve performans dรผลŸรผลŸlerini รถnlemek iรงin yazma kฤฑsฤฑtlamasฤฑnฤฑ etkinleลŸtirmeyi dรผลŸรผnรผn:

chevron-rightโŒจ๏ธ XML Config;hashtag
chevron-rightโŒจ๏ธ .NET Config;hashtag

Yukarฤฑdaki รถrnekte, varsayฤฑlan bรถlgenin checkpoint buffer boyutu 1 GB olarak ayarlanmฤฑลŸtฤฑr.

Enabling Direct I/O

Genellikle, bir uygulama diskten veri okuduฤŸunda, iลŸletim sistemi verileri alฤฑr ve รถnce bir dosya bufferฤฑna koyar. Benzer ลŸekilde, her yazma iลŸlemi iรงin iลŸletim sistemi รถnce verileri cacheโ€™e yazar ve daha sonra diske aktarฤฑr. Bu iลŸlemi ortadan kaldฤฑrmak iรงin DoฤŸrudan I/O'yu etkinleลŸtirebilirsiniz; bu durumda veriler dosya buffer cacheโ€™ini atlayarak doฤŸrudan diskten/diske yazฤฑlฤฑr ve okunur.

Ignite'daki Direct I/O modรผlรผ, kirli sayfalarฤฑ RAM'den diske yazan checkpoint iลŸlemini hฤฑzlandฤฑrmak iรงin kullanฤฑlฤฑr. YoฤŸun yazma gerektiren iลŸ yรผkleri iรงin DoฤŸrudan I/O eklentisini kullanmayฤฑ dรผลŸรผnรผn.

DoฤŸrudan I/O'nun รถzellikle WAL dosyalarฤฑ iรงin etkinleลŸtirilemeyeceฤŸini unutmayฤฑn. Bununla birlikte, DoฤŸrudan I/O modรผlรผnรผn etkinleลŸtirilmesi, WAL dosyalarฤฑyla ilgili olarak da kรผรงรผk bir fayda saฤŸlar: WAL verileri, OS buffer cacheโ€™inde รงok uzun sรผre depolanmayacaktฤฑr; sonraki sayfa cache taramasฤฑnda temizlenir (WAL moduna baฤŸlฤฑ olarak) ve sayfa cacheโ€™inden kaldฤฑrฤฑlฤฑr.

Direct I/O'yu etkinleลŸtirebilir, {IGNITE_HOME}/libs/optional/ignite-direct-io klasรถrรผnรผ Ignite daฤŸฤฑtฤฑmฤฑnฤฑzda รผst dรผzey libs/optional/ignite-direct-io klasรถrรผne taลŸฤฑyabilir veya buradaarrow-up-right anlatฤฑldฤฑฤŸฤฑ gibi Maven baฤŸฤฑmlฤฑlฤฑฤŸฤฑ olarak kullanabilirsiniz.

ร‡alฤฑลŸma zamanฤฑnda eklentiyi etkinleลŸtirmek veya devre dฤฑลŸฤฑ bฤฑrakmak iรงin IGNITE_DIRECT_IO_ENABLED sistem รถzelliฤŸini kullanabilirsiniz.

Ayrฤฑntฤฑlar iรงin Ignite Direct I/O Wikiarrow-up-right bรถlรผmรผnden faydalanabilirsinizโ€ฆ

Purchase Production-Level SSDs

Ignite Native Persistence performansฤฑnฤฑn, *SSD'lerin tasarlanma ve รงalฤฑลŸma ลŸekliarrow-up-right* nedeniyle birkaรง saatlik yoฤŸun yazma yรผkรผnden sonra dรผลŸebileceฤŸini unutmayฤฑn. Performansฤฑ yรผksek tutmak iรงin hฤฑzlฤฑ, production level SSD'ler satฤฑn almayฤฑ veya Intel Optane Persistent Memory gibi geรงici olmayan bellek aygฤฑtlarฤฑna geรงmeyi dรผลŸรผnรผn.

SSD Over-provisioning

%50 dolu bir diskte rastgele yazma performansฤฑ, SSD'lerin over-provisioningarrow-up-right nedeniyle %90 dolu bir diske gรถre รงok daha iyidir.

Daha yรผksek over-provisioning oranlarฤฑna sahip SSD'ler satฤฑn almayฤฑ dรผลŸรผnรผn ve รผreticinin bunu ayarlamak iรงin araรงlar saฤŸladฤฑฤŸฤฑndan emin olun.

DรผลŸรผk over-provisioning ayarฤฑ ve SSD dรผzeyinde sรผrekli garbage collectionโ€™un neden olduฤŸu darboฤŸazlardan kaรงฤฑnmak iรงin normal SSD'ler yerine Intel 3D XPoint sรผrรผcรผleri kullanmayฤฑ dรผลŸรผnรผn. Daha fazlasฤฑnฤฑ buradan okuyun.arrow-up-right

Last updated