Oracle Graph Database ve Graph Server (PGX/PGQL) Kurulum Rehberi

YUNUS EMRE ATAY

ORACLE_GRAPH

Veri dünyası artık sadece satırlardan ve sütunlardan ibaret değil. Günümüzde veriler arasındaki ilişkiler, verinin kendisi kadar değerli hale geldi. Dolandırıcılık tespiti (Fraud Detection), sosyal ağ analizleri ve tavsiye sistemleri gibi karmaşık yapılar için geleneksel SQL sorguları bazen yetersiz kalabilir. İşte bu noktada sahneye Oracle Graph çıkıyor.

Bu rehber dizisinde, hiçbir ön hazırlığınız olmasa dahi, sıfırdan başlayarak profesyonel bir Oracle Graph Database and Remote Graph Server (PGX) mimarisini nasıl ayağa kaldıracağınızı öğreneceksiniz. Üstelik bu kurulumu otomatik paketlerle (RPM) değil, bir DBA titizliğiyle Binary (Image-based) yöntemini kullanarak gerçekleştireceğiz.


BÖLÜM 1. Oracle Graph Mimarisi: PGX ve PGQL Nedir?

Kuruluma geçmeden önce, kuracağımız yapının parçalarını tanıyalım. Bir Oracle Graph ekosistemi temel olarak üç ana bileşenden oluşur:

1. Veri Katmanı: Oracle Database 23ai

Graf verilerinizin (Nodes & Edges) kalıcı olarak saklandığı yerdir. Oracle 23ai ile birlikte “Operational Property Graph” yetenekleri veritabanının çekirdeğine entegre edilmiştir.

  • Neden 23ai? Çünkü artık SQL ve Graph sorgularını aynı anda, aynı tabloda çalıştırabiliyoruz.

2. Analiz Motoru: Graph Server (PGX)

PGX (Parallel Graph AnalytiX), bu mimarinin kalbidir. Bellek içi (in-memory) çalışan bir analiz motorudur. Veritabanındaki veriyi RAM üzerine alarak karmaşık matematiksel algoritmaları (örneğin: PageRank) milisaniyeler içinde çalıştırır.

  • Neden Ayrı Sunucu? Büyük veri setlerinde analiz işlemleri yüksek CPU ve RAM tüketir. Veritabanı performansını etkilememek için Graph Server’ı ayrı bir sunucuda konumlandırıyoruz.

3. Sorgu Dili: PGQL (Property Graph Query Language)

Graf yapılarını sorgulamak için kullanılan, SQL’e çok benzeyen ama ilişkileri tanımlamakta çok daha yetenekli bir dildir.

  • Örnek: MATCH (a)-[:ARKADASI]->(b) gibi basit bir söz dizimiyle derin bağlantıları çekebiliriz.

Neler Gerekiyor? (Ön Hazırlık)

Bu yazı serisini benimle birlikte uygulamak istiyorsanız ihtiyacınız olanlar:

  1. İki adet Linux Sunucu: (Önerilen: Oracle Linux 8 veya 9).
  2. Oracle Database 23ai Binary Dosyası: (.zip formatında).
  3. Java JDK 17+: Graph Server’ın çalışması için gerekli.
  4. Bir miktar sabır ve terminal merakı!


Bölüm 2: İşletim Sistemi Hazırlığı ve Oracle Database 23ai Binary Kurulumu

Oracle Database 23ai dünyasına adım atarken, sistemin temelini sağlam atmak performans ve kararlılık için kritiktir. Bu bölümde, işletim sistemini veritabanına hazır hale getirecek ve yazılımı en profesyonel yöntem olan “Image-based” (imaj tabanlı) metoduyla kuracağız.

Gerekli Dosyalar ve Kaynak Bağlantıları

Kuruluma başlamadan önce aşağıdaki paketlerin elinizde olduğundan emin olun. İnternet erişimi olmayan ortamlar için bu paketleri önceden indirip sunucuya transfer etmeniz gerekecektir:

1. Adım: İşletim Sistemini Oracle’a Hazırlama

Manuel konfigürasyonlarla vakit kaybetmemek ve Oracle standartlarını tam uygulamak için Preinstall paketini kullanıyoruz. Bu paket; kernel parametrelerini, kullanıcı limitlerini ve gerekli oracle kullanıcısını otomatik olarak oluşturur.

Paketin Kurulumu:

yum install -y oracle-ai-database-preinstall-26ai-1.0-1.el8.x86_64.rpm

Firewall Servisini ve SECURELinux Özelliklerini Kapatmak:

systemctl stop firewalld.service 
systemctl disable firewalld.service 
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

Hosts dosyasını düzenleyelim:

cat << EOF >> /etc/hosts
150.150.150.151  graph.db       graphdb
150.150.150.152  graph.server   graphserver
EOF

Bu işlemden sonra, sistemin yeni kernel parametrelerini tanıması için sunucuyu yeniden başlatabilir.

2. Adım: Dizin Yapısı ve Yetkilendirme

Veritabanı yazılımını (Binary) kuracağımız alanı hazırlayalım. Kurumsal standart olan /u01 dizin yapısını tercih ediyoruz:

# Dizinlerin oluşturulması
mkdir -p /u01/app/oracle/product/23.0.0/dbhome_1
mkdir -p /u01/app/oraInventory

# Sahiplik ve yetki ayarları
chown -R oracle:oinstall /u01
chmod -R 775 /u01

3. Adım: Oracle Kullanıcı Vönetimi Ve Environment Variables

oracle kullanıcısına şifre atayalım ve Gerekli Değişkelerin Barındırdığı Bir Profile dosyası oluşturalım:

passwd oracle
Changing password for user oracle.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
cat << EOF >> /home/oracle/.profile_db
export ORACLE_HOSTNAME=graph.db
export ORACLE_HOME=/u01/app/oracle/product/23.0.0/dbhome_1
export ORACLE_UNQNAME=ORAGRAPH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=ORAGRAPH

export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
export TNS_ADMIN=$ORACLE_HOME/network/admin

export TMPDIR=/tmp
export TMP=/tmp
EOF

chown oracle:oinstall /home/oracle/.profile_db
chmod 644 /home/oracle/.profile_db

cat << EOF >> /home/oracle/.bash_profile
. /home/oracle/.profile_db
EOF

4. Adım: Oracle 23ai Binary (Image-Based) Kurulumu

Geleneksel kurulum yöntemlerinden farklı olarak, Oracle 23ai ile birlikte gelen “Image-based” yöntemi, yazılımın bir zip dosyası olarak doğrudan hedef dizine açılmasını temel alır. Bu, kurulum süresini ciddi oranda kısaltır.

Yazılımın Açılması:

chown oracle.oinstall V1054592-01.zip
chmod 775 V1054592-01.zip

su - oracle
unzip -q V1054592-01.zip -d /u01/app/oracle/product/23.0.0/dbhome_1/

cd /u01/app/oracle/product/23.0.0/dbhome_1/
./runInstaller

Sihirbazda Seçilmesi Gerekenler:

  1. Configuration Option: “Set Up Software Only” (Sadece yazılımı kur).
  2. Database Installation Options: “Single Instance Database Installation”.
  3. Database Edition: “Enterprise Edition”.
  4. Root Scripts: Kurulumun sonunda karşınıza çıkan /u01/app/oraInventory/orainstRoot.sh and /u01/app/oracle/product/23.0.0/dbhome_1/root.sh scriptlerini root kullanıcısı ile çalıştırmayı unutmayın.


Bölüm 3: Database Configuration Assistant (DBCA) ile Veritabanı ve PDB Yapılandırması

Önceki bölümde Oracle 23ai yazılımını (Binary) sunucumuza yerleştirmiştik. Şimdi bu yazılımı kullanarak, Graph analizleri için optimize edilmiş, modern bir veritabanı instance’ı oluşturacağız. Oracle 23ai ile birlikte gelen “Multitenant” mimarisi, Graph verilerimizi yönetmek için bize izole ve güvenli bir alan sunuyor.

1. Neden DBCA ve Neden Advanced Mode?

Veritabanını oluşturmak için Oracle’ın grafiksel aracı olan DBCA (Database Configuration Assistant) kullanacağız. Profesyonel bir kurulumda her zaman “Advanced Configuration” seçeneğiyle ilerlemeliyiz. Bu sayede;

  • Karakter setini (Character Set) manuel belirleyebilir,
  • Bellek (SGA/PGA) yönetimini Graph yüküne göre optimize edebilir,
  • Graph Server’ın bağlanacağı Pluggable Database (PDB) yapısını en baştan kurgulayabiliriz.

2. Adım Adım Veritabanı Oluşturma

Terminalde oracle kullanıcısı ile dbca komutunu vererek sihirbazı başlatın.

dbca

A. Temel Yapılandırma

  • Select Database Operation: “Create a Database” seçeneğiyle devam edin.
  • Select Database Creation Mode: Burada mutlaka “Advanced Configuration” kutucuğunu işaretleyin.
  • Database Type: “Oracle Single Instance Database” ve “General Purpose or Transaction Processing” şablonunu seçin.

B. Kimlik ve PDB Ayarları

  • Global Database Name: ORAGRAPH
  • SID: ORAGRAPH
  • Create as Container Database: Bu seçenek 23ai’de varsayılan ve zorunludur.
  • Create a local PDB: İşte en kritik nokta burası. Graph projeleriniz için özel bir alan açın.
    • PDB Name: PDB_GRAPH (Bu ismi not edin, Graph Server kurulumunda lazım olacak).

C. Bellek (Memory) ve Karakter Seti Yönetimi

Graph işlemleri in-memory (bellek içi) odaklı olduğu için veritabanı tarafındaki bellek dağılımı önemlidir:

  • Memory: Test ortamı için toplam RAM’inizin yaklaşık %40-50’sini Oracle’a ayırın.
  • Character Sets: Burası çok kritik! Graph verilerinin ve metaverilerin doğru işlenmesi için karakter setini mutlaka AL32UTF8 olarak seçin.

3. Graph Kullanıcısı ve Yetkilendirme

Veritabanımız kurulduktan ve open durumuna geçtikten sonra, Graph Server’ın (PGX) bağlanacağı yetkili kullanıcıyı hazırlamalıyız. 23ai ile birlikte Graph yetkileri oldukça basitleşmiştir.

Terminalden sqlplus ile bağlanarak şu komutları sırasıyla çalıştırın:

-- PDB'ye bağlanalım
ALTER SESSION SET CONTAINER = PDB_GRAPH;

-- Graph kullanıcısını oluşturalım
CREATE USER GRAPH1 IDENTIFIED BY GRAPH1;

-- Temel bağlantı ve kaynak yetkileri
GRANT CONNECT, RESOURCE TO GRAPH1 ;

-- 23ai ile gelen sihirli yetki: Graph Developer
-- Bu yetki kullanıcının graf modelleri oluşturmasına ve analiz etmesine olanak tanır.
GRANT GRAPH_DEVELOPER TO GRAPH1 ;

-- Kotayı sınırsız yapalım (Veri yüklerken sorun yaşamamak için)
ALTER USER GRAPH1 QUOTA UNLIMITED ON USERS;

4. Listener ve Servis Kontrolü

Graph Server, veritabanına ağ üzerinden (JDBC) bağlanacağı için Listener’ın ayakta olduğundan ve PDB servisinin kayıtlı olduğundan emin olmalıyız.

lsnrctl status

Bu komutun çıktısında Service "pdb_graph" has 1 instance(s)... satırını görmelisiniz. Eğer servis görünmüyorsa veritabanı içinde ALTER SYSTEM REGISTER; komutunu koşturabilirsiniz.


Bölüm 4: Ayrı Sunucuda Oracle Graph Server (PGX) Kurulumu ve Konfigürasyonu

Veritabanımız (Server A) artık hazır. Şimdi, veritabanı üzerindeki yükü hafifletmek ve grafik analizlerini in-memory (bellek içi) performansıyla gerçekleştirmek için Graph Server kurulumuna başlıyoruz. Bu sunucu, karmaşık grafik algoritmalarının koşturulduğu bir “hesaplama merkezi” görevini görecek.

1. Adım: İşletim Sistemi Hazırlığı ve Kullanıcı Oluşturma

Server B üzerinde henüz hiçbir yapılandırma olmadığını varsayarak, temel katmanı oluşturuyoruz. Veritabanı sunucusuyla standart sağlamak adına burada da bir oracle kullanıcısı ve u01 yapısı kuracağız.

# Root kullanıcısı ile:
groupadd oinstall
useradd -g oinstall oracle
passwd oracle

2. Gerekli Dosyalar ve Kaynak Bağlantıları

Server B üzerinde kurulumu gerçekleştirmek için aşağıdaki iki ana bileşene ihtiyacımız var:

Graph Server’ın motoru olan Java’yı sisteme dahil edelim. İndirdiğin RPM paketini kullanarak kurulumu gerçekleştiriyoruz:

# RPM paketini kuralım
sudo rpm -ivh jdk-17.0.12_linux-x64_bin.rpm

# Kurulumu ve versiyonu teyit edelim
java -version

Önemli: Eğer sistemde birden fazla Java versiyonu varsa, sudo alternatives --config java komutuyla JDK 17’yi varsayılan yapmayı unutmayın.

sudo alternatives --config java

There is 1 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jdk-17.0.12-oracle-x64/bin/java

Enter to keep the current selection[+], or type selection number: 1

Server B’de root yetkisiyle önce Java’yı, ardından Graph Server motorunu kuruyoruz.

rpm -ivh oracle-graph-26.1.0.x86_64.rpm

Bilgi: oracle-graph RPM paketi, yazılımı varsayılan olarak /opt/oracle/graph dizinine kurar.

3. HTTPS ve SSL/TLS Konfigürasyonu (Self-Signed)

RPM ile gelen 90 günlük demo sertifikayı iptal edip, yerine 100 yıl (36.500 gün) geçerli profesyonel bir sertifika oluşturuyoruz.

# Mevcut demo keystore'u yedekleyelim
sudo mv /etc/oracle/graph/server_keystore.jks /etc/oracle/graph/server_keystore.jks.old

# 100 yıl geçerli yeni sertifikayı üretelim
sudo keytool -genkeypair \
  -alias pgx \
  -keyalg RSA \
  -keysize 2048 \
  -validity 36500 \
  -keystore /etc/oracle/graph/server_keystore.jks \
  -dname "CN=graph.server, OU=IT, O=Oraclius, L=Istanbul, ST=TR, C=TR" \
  -storepass oraclius \
  -keypass oraclius \
  -ext san=ip:150.150.150.152

# Dosya yetkilerini oraclegraph kullanıcısına verelim
sudo chown oraclegraph:oraclegraph /etc/oracle/graph/server_keystore.jks

İç servislerin birbirine güvenmesi (SunCertPathBuilderException hatasını aşmak için), oluşturduğumuz sertifikayı JDK’nın kendi cacerts dosyasına import etmeliyiz:

# Sertifikayı dışa aktar
sudo keytool -exportcert -alias pgx \
  -keystore /etc/oracle/graph/server_keystore.jks \
  -storepass oraclius -rfc -file /etc/oracle/graph/pgx-self-signed.crt

# JDK 17'nin güven listesine ekle
sudo keytool -importcert -alias pgx-selfsigned \
  -file /etc/oracle/graph/pgx-self-signed.crt \
  -keystore /usr/lib/jvm/jdk-17.0.12-oracle-x64/lib/security/cacerts \
  -storepass changeit -noprompt

4. Servis Ayarları ve JDBC Bağlantısı

Graph Server’ın Server A üzerindeki veritabanına bağlanması için gerekli kimlik ve ağ ayarlarını yapıyoruz.

Güvenlik nedeniyle Keystore şifrelerini systemd üzerinde çevre değişkeni olarak tanımlıyoruz:

sudo systemctl edit pgx
# Açılan dosyaya ekleyin:
[Service]
Environment="PGX_SERVER_KEYSTORE_PASSWORD=oraclius"
Environment="PGX_SERVER_KEY_PASSWORD=oraclius"

/etc/oracle/graph/server.conf dosyasında TLS’i aktif hale getirip, /etc/oracle/graph/pgx.conf dosyasında JDBC URL’mizi ve BASE URL’mizi tanımlıyoruz:

"jdbc_url": "jdbc:oracle:thin:@150.150.150.151:1521/PDB_GRAPH"
...
"base_url": "https://150.150.150.152:7007"

5. Kurulumun Doğrulanması (Token Testi)

Tüm ayarlar bittikten sonra servisi restart edip ilk erişim token’ımızı alarak bağlantıyı test ediyoruz:

sudo systemctl daemon-reload
sudo systemctl restart pgx

# Token İsteği
curl -k --location 'https://150.150.150.152:7007/auth/token' \
  --header 'Content-Type: application/json' \
  --data '{
    "username": "GRAPH1",
    "password": "GRAPH1",
    "createSession": true,
    "source": "commandLine"
  }'

6. Web Arayüzünün (Webapps) Entegrasyonu

Graph Server’ın görsel bir yüzü olması için oracle-graph-webapps-26.1.0.zip paketindeki uygulamaları sunucuya dahil ediyoruz.

# Webapps paketini açıp .war dosyalarını hedef dizine kopyalayın
unzip oracle-graph-webapps-26.1.0.zip -d /tmp/webapps

Şimdi daha önce /tmp/webapps içine açtığın .war dosyalarını buraya taşıyalım:

cp /tmp/webapps/graph-server-webapp-26.1.0.war /opt/oracle/graph/pgx/server/

Graph Server’ın bu dosyaları açıp çalıştırabilmesi için sahipliği oraclegraph kullanıcısına (veya RPM’in oluşturduğu servis kullanıcısına) vermeliyiz:

# Tüm graph ana dizinini sahiplendirelim
sudo chown -R oraclegraph:oraclegraph /opt/oracle/graph

# Konfigürasyon ve log dizinlerini de unutmayalım
sudo chown -R oraclegraph:oraclegraph /etc/oracle/graph
sudo chown -R oraclegraph:oraclegraph /var/log/oracle/graph

7. Adım: Oracle Kullanıcısı Çevre Değişkenleri

Java kuruldu ama Graph Server’ın bu yolu tam olarak bilmesi gerekiyor. oracle kullanıcısının .bash_profile dosyasına şu eklemeleri yapalım:

su - oracle
vi ~/.bash_profile

# Dosyanın sonuna şunları ekleyin:
export JAVA_HOME=/usr/lib/jvm/jdk-17.0.12-oracle-x64
export GRAPH_HOME=/opt/oracle/graph
export PATH=$JAVA_HOME/bin:$GRAPH_HOME/bin:$PATH

source ~/.bash_profile


Bölüm 5: İlk Graph Modelinin Oluşturulması ve Görselleştirme (PoC)

Altyapı kurulumunu tamamladığımıza göre, artık teoriyi pratiğe dökme zamanı. Bu bölümde, Server A (Veritabanı) üzerinde örnek veri setleri oluşturacak, bu verileri bir Property Graph modeline dönüştürecek ve Server B (Graph Server) üzerinde in-memory (bellek içi) olarak analiz edeceğiz. Bu aşama, 15TB’lık devasa verilere geçmeden önceki en kritik “test sürüşü” aşamasıdır.

1. Adım: Veritabanı Tarafında Test Tablolarının Hazırlanması

Graph modelleri iki temel bileşenden oluşur: Vertex (Düğümler) ve Edge (İlişkiler). Bir bankacılık senaryosu üzerinden giderek, hesaplar arası para transferini modelleyelim.

Server A (Oracle DB) üzerinde çalıştırın:

-- 1. Vertex Tablosu: Banka Hesapları
CREATE TABLE GRAPH1.GRAPH_USERS (
    ACCOUNT_ID NUMBER PRIMARY KEY,
    USER_NAME VARCHAR2(100),
    ACCOUNT_TYPE VARCHAR2(50)
);

-- 2. Edge Tablosu: Para Transferleri
CREATE TABLE GRAPH1.ACCOUNT_TRANSFERS (
    TX_ID NUMBER PRIMARY KEY,
    FROM_ACCOUNT NUMBER,
    TO_ACCOUNT NUMBER,
    AMOUNT NUMBER,
    TX_DATE DATE,
    CONSTRAINT fk_from FOREIGN KEY (FROM_ACCOUNT) REFERENCES GRAPH_USERS(ACCOUNT_ID),
    CONSTRAINT fk_to FOREIGN KEY (TO_ACCOUNT) REFERENCES GRAPH_USERS(ACCOUNT_ID)
);

-- Örnek Veri Girişi
INSERT INTO GRAPH1.GRAPH_USERS VALUES (1, 'User1', 'Premium');
INSERT INTO GRAPH1.GRAPH_USERS VALUES (2, 'User2', 'Standard');
INSERT INTO GRAPH1.GRAPH_USERS VALUES (3, 'User3', 'Settlement');

INSERT INTO GRAPH1.ACCOUNT_TRANSFERS VALUES (101, 1, 2, 5000, SYSDATE);
INSERT INTO GRAPH1.ACCOUNT_TRANSFERS VALUES (102, 2, 3, 2000, SYSDATE);
COMMIT;

2. Adım: SQL Property Graph (PG) Objesinin Oluşturulması

Oracle 23ai ile gelen en büyük yenilik, grafiği veritabanı seviyesinde bir obje olarak tanımlayabilmektir. Bu komut veriyi kopyalamaz; sadece hangi tablonun düğüm, hangisinin ilişki olduğunu sisteme tanıtır.

Server A (Oracle DB) üzerinde çalıştırın:

CREATE PROPERTY GRAPH BANK_TEST_GRAPH
  VERTEX TABLES (
    GRAPH_USERS
      KEY (ACCOUNT_ID)
      LABEL ACCOUNT PROPERTIES (USER_NAME, ACCOUNT_TYPE)
  )
  EDGE TABLES (
    ACCOUNT_TRANSFERS
      KEY (TX_ID)
      SOURCE KEY (FROM_ACCOUNT) REFERENCES GRAPH_USERS (ACCOUNT_ID)
      DESTINATION KEY (TO_ACCOUNT) REFERENCES GRAPH_USERS (ACCOUNT_ID)
      LABEL TRANSFER PROPERTIES (AMOUNT)
  );

3. Adım: Grafiği Graph Server Belleğine (In-Memory) Yükleme

23ai ve Graph Server 26.1 sürümüyle birlikte en sağlıklı yöntem opg4j (Java Shell) kullanmaktır. Server B terminalinde şu komutla giriş yapın:

cd /opt/oracle/graph/bin
./opg4j --base_url https://150.150.150.152:7007 --username GRAPH1

Bağlantı kurulduktan sonra, grafiği bellek içi (In-Memory) katmana almak ve Dashboard gibi dış araçlarla paylaşmak için şu komutları opg4j> satırına yazın:

// 1. Grafiği veritabanından RAM'e yükle
var graph = session.readGraphByName("BANK_TEST_GRAPH", GraphSource.PG_SQL);

// 2. Grafiği Dashboard üzerinde görünür kılmak için "Global" olarak yayınla
graph.publish();

4. Adım: Dashboard Üzerinde Görselleştirme

Son adımda, verinin sadece bir tablo değil, yaşayan bir “ilişki ağı” olduğunu kanıtlıyoruz. Tarayıcınızdan https://150.150.150.152:7007/dash/ adresine gidin:

  • Mode: Graph Server (In-Memory) seçeneğini işaretleyin.
  • Graph Name: BANK_TEST_GRAPH objesini seçin.
  • Query: Aşağıdaki PGQL sorgusunu çalıştırın:
SELECT e
FROM MATCH ()-[e]->() ON BANK_TEST_GRAPH
LIMIT 100

Bu sorgu sonucunda Dashboard üzerinde 3 adet düğüm ve aralarındaki para akışını temsil eden okları görsel olarak göreceksiniz. Bu görsel teyit, altyapımızın 50 milyar satırlık devasa verilere hazır olduğunun kanıtıdır.


Bölüm 6: Graph Server (PGX) ve Sistem Seviyesi Performans Tuning

Graph Server kurulumunu tamamlamak sadece ilk adımdır. Milyarlarca ilişkiyi (Edge) saniyeler içinde analiz edebilmek için sistemin “dar boğazlarını” ortadan kaldırmalıyız. Bu bölümde, donanım kaynaklarını maksimum verimle kullanmak için yapılması gereken kritik sistem ayarlarını inceleyeceğiz.

1. İşletim Sistemi: HugePages Yapılandırması

Standart Linux bellek sayfaları 4KB boyutundadır. Ancak Graph Server gibi belleği yoğun kullanan uygulamalarda, CPU’nun bu sayfaları adresleme yükü (TLB lookup) performansı düşürebilir. HugePages (2MB veya 1GB’lık sayfalar) kullanarak bu yükü minimize ediyoruz.

Herhangi bir bellek operasyonuna başlamadan önce, mevcut RAM kullanımını görmeli ve çakışmaları önlemek için Graph Server servisini durdurmalıyız.

1.1. Servisi Durdurun:

sudo systemctl stop pgx

1.2. Mevcut RAM ve HugePage Durumunu Kontrol Edin:

free -h
grep -i Huge /proc/meminfo

Burada HugePages_Total: 0 olduğunu göreceksiniz. Bu, sistemin henüz hiçbir alanı HugePages için ayırmadığını gösterir.

Adım 2: HugePages Rezervasyonu (Kalıcı Ayarlar)

Sistemdeki 8GB RAM’in 4GB’ını HugePages için ayıracağız. Standart bir HugePage boyutu 2MB’dır. 4GB (4096MB) elde etmek için 2048 adet sayfa rezerve etmemiz gerekir ($4096 / 2 = 2048$).

2.1. Kernel Parametrelerini Düzenleyin:

/etc/sysctl.conf dosyasını açın ve en alta şu satırı ekleyin:

vm.nr_hugepages = 2048

2.2. Ayarları Yükleyin ve Doğrulayın:

sudo sysctl -p
grep -i Huge /proc/meminfo

Şu an HugePages_Total: 2048 and HugePages_Free: 2048 değerlerini görmelisiniz. Eğer HugePages_Free daha düşükse, başka bir uygulama (örn. Oracle DB) bu alanı kapmış olabilir.

Adım 3: JVM’i HugePages Kullanmaya Zorlamak

Sistemin HugePages ayırmış olması, Java’nın onu kullanacağı anlamına gelmez. Java’yı bu alanı kullanması için “ikna” etmemiz gerekir.

3.1. Servis Dosyasını Güncelleyin: /etc/systemd/system/pgx.service (veya ilgili unit dosyası) içindeki Environment="JAVA_OPTS=..." satırına şu kritik bayrakları ekleyin:

# -Xms ve -Xmx değerlerini HugePage alanımızla (4G) uyumlu set ediyoruz
Environment="JAVA_OPTS=-Xms4g -Xmx4g -XX:+UseG1GC -XX:+UseLargePages -XX:+AlwaysPreTouch"

-XX:+UseLargePages: Java’nın HugePages talep etmesini sağlar.

-XX:+AlwaysPreTouch: Java başladığında tüm 4GB’lık HugePage alanına “dokunur” ve fiziksel olarak rezerve eder.

Adım 4: Servisi Başlatma ve Gerçek Zamanlı Kontrol

Şimdi motoru çalıştırıyoruz ve yaptıklarımızın işe yarayıp yaramadığını canlı olarak test ediyoruz.

4.1. Servisi Başlatın:

sudo systemctl daemon-reload
sudo systemctl start pgx

4.2. Doğrulama (DBA Check): Şimdi asıl kanıtı görme zamanı. Java’nın HugePages’ten pay alıp almadığını kontrol edelim:

grep -i Huge /proc/meminfo
AnonHugePages:    786432 kB
ShmemHugePages:        0 kB
FileHugePages:      2048 kB
HugePages_Total:    2048
HugePages_Free:     1961
HugePages_Rsvd:      109
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         4194304 kB

Çıktımızda HugePages_Total: 2048 görürken, HugePages_Rsvd (Reserved) kısmının artmaya başladığını ve HugePages_Free miktarının azaldığını gözlemledik. Bu, Java sürecinin HugePages havuzundan pay aldığının en somut kanıtıdır.

Leave a Reply to %s

Your email address will not be published. Required fields are marked with *

Hey!

Hello! I'm EMRE, and I'm passionate about technology, software, databases, and data analytics. In this blog, I aim to provide helpful content by sharing my learnings and experiences. In my spare time, I enjoy exploring new technologies, writing, and self-improvement.

My contact addresses