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ฤฑ, 4KB'nin yeterli olmasฤฑ gerektiฤini doฤrulamaktadฤฑr.
En uygun sayfa boyutunu seรงtikten sonra, bunu cluster konfigรผrasyonuna uygulayฤฑn:
โจ๏ธ XML Config;
<?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>โจ๏ธ .NET Config
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:
โจ๏ธ XML Config;
<?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>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ลtirme 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ฤฑna bakฤฑnฤฑzโฆ
Disabling WAL
WAL'ฤฑ devre dฤฑลฤฑ bฤฑrakmanฤฑn 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:
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:
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 burada 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 Wiki bรถlรผmรผnden faydalanabilirsinizโฆ
Purchase Production-Level SSDs
Ignite Native Persistence performansฤฑnฤฑn, *SSD'lerin tasarlanma ve รงalฤฑลma ลekli* 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-provisioning 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.
Last updated