F.29. online_analyze — Otomatik İstatistik Güncelleme
online_analyze modülü, INSERT, UPDATE, DELETE, SELECT INTO veya COPY işlemlerinden sonra etkilenen tablolar için istatistikleri otomatik olarak güncelleyen bir dizi özellik sağlar. Bu modül, sorgu planlayıcısının her zaman güncel istatistiklere sahip olmasını sağlayarak performansı artırır.
Geleneksel olarak, PostgreSQL'de tablo istatistiklerini güncellemek için ANALYZE komutunu manuel olarak çalıştırmanız gerekir. online_analyze modülü, bu işlemi otomatikleştirir ve veri değişikliklerinden hemen sonra istatistikleri günceller.
F.29.1. Genel Bakış
online_analyze modülü, aşağıdaki özellikleri sağlar:
- INSERT, UPDATE, DELETE, SELECT INTO veya COPY işlemlerinden sonra otomatik istatistik güncelleme
- Yapılandırılabilir eşik değerleri ile seçici istatistik güncelleme
- Performans optimizasyonu için minimum güncelleme aralığı
- Tablo bazında veya sütun bazında istatistik güncelleme kontrolü
online_analyze modülü, özellikle yüksek yazma yoğunluğuna sahip veritabanlarında faydalıdır. Modül, sorgu planlayıcısının her zaman güncel istatistiklere sahip olmasını sağlayarak, daha iyi sorgu planları oluşturulmasına yardımcı olur.
<strong>Not:</strong> online_analyze modülü, her veri değişikliğinden sonra istatistikleri güncellemez. Bunun yerine, yapılandırılabilir eşik değerlerine göre istatistikleri günceller. Bu, performansı korurken istatistiklerin güncel kalmasını sağlar.
F.29.2. Kurulum
online_analyze modülünü kullanmak için, önce modülü yüklemelisiniz. Modülü yüklemek için LOAD komutunu kullanın:
LOAD 'online_analyze';
Not: LOAD komutu hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.
Modül, her veritabanında ayrı ayrı etkinleştirilmelidir. Modülü kullanmak istediğiniz her veritabanında CREATE EXTENSION komutunu çalıştırın.
<strong>Not:</strong> online_analyze modülü, Postgres Pro Enterprise ve Postgres Pro Standard ile birlikte gelir. Modül, PostgreSQL 9.5 ve sonraki sürümlerde mevcuttur.
F.29.3. Yapılandırma
online_analyze modülü, aşağıdaki yapılandırma parametrelerini destekler. Bu parametreler postgresql.conf dosyasında veya ALTER SYSTEM komutu ile ayarlanabilir:
F.29.3.1. online_analyze.enable
<strong>Tip:</strong> boolean
<strong>Varsayılan:</strong> on
online_analyze modülünün etkin olup olmadığını belirler. Bu parametre 'off' olarak ayarlandığında, modül hiçbir istatistik güncellemesi yapmaz.
F.29.3.2. online_analyze.verbose
<strong>Tip:</strong> boolean
<strong>Varsayılan:</strong> on
ANALYZE VERBOSE çalıştırır.
Not: verbose SQL dilinde rezerve edilmiş bir anahtar kelime olduğu için, SQL sorgularında bu parametreyi tırnak içine almanız gerekir. Örneğin: ALTER SYSTEM SET "online_analyze.verbose" = 'off';
F.29.3.3. online_analyze.threshold
<strong>Tip:</strong> integer
<strong>Varsayılan:</strong> 50
İstatistiklerin güncellenmesi için gereken minimum değişiklik sayısı. Bu sayı, bir tabloda yapılan INSERT, UPDATE veya DELETE işlemlerinin sayısını temsil eder. Eşik değerine ulaşıldığında, istatistikler otomatik olarak güncellenir. Bu parametre autovacuum_analyze_threshold parametresine benzer.
<strong>Not:</strong> Daha düşük eşik değerleri, daha sık istatistik güncellemelerine neden olur, ancak daha fazla CPU kullanımına yol açar. Daha yüksek eşik değerleri, daha az güncelleme yapar, ancak istatistikler daha eski olabilir.
F.29.3.4. online_analyze.scale_factor
<strong>Tip:</strong> float
<strong>Varsayılan:</strong> 0.1
Tablo boyutuna göre ölçeklenen eşik değeri için ölçek faktörü. Bu faktör, tablo boyutunun bir yüzdesi olarak eşik değerini hesaplamak için kullanılır. Örneğin, 0.1 değeri, tablo boyutunun %10'u kadar değişiklik olduğunda istatistiklerin güncellenmesi gerektiğini belirtir. Bu parametre autovacuum_analyze_scale_factor parametresine benzer.
F.29.3.5. online_analyze.min_interval
<strong>Tip:</strong> integer (milisaniye)
<strong>Varsayılan:</strong> 10000
Aynı tablo için ANALYZE çağrıları arasındaki minimum zaman aralığı (milisaniye cinsinden).
F.29.3.6. online_analyze.table_type
<strong>Tip:</strong> enum ('all', 'persistent', 'temporary', 'none')
<strong>Varsayılan:</strong> 'all'
Hangi tablo türlerinin izleneceğini belirler:
all— Tüm tablolarpersistent— Sadece kalıcı tablolartemporary— Sadece geçici tablolarnone— Hiçbir tablo izlenmez
F.29.4. Kullanım
online_analyze modülü etkinleştirildikten sonra, INSERT, UPDATE, DELETE, SELECT INTO veya COPY işlemleri otomatik olarak istatistikleri günceller. Modül, yapılandırılabilir eşik değerlerine göre çalışır.
F.29.4.1. Temel Kullanım
Modül etkinleştirildikten sonra, herhangi bir ek yapılandırma gerekmez. Modül, varsayılan ayarlarla otomatik olarak çalışır:
-- Modülü yükle
LOAD 'online_analyze';
-- Artık INSERT, UPDATE, DELETE işlemleri otomatik olarak
-- istatistikleri güncelleyecektir
INSERT INTO mytable VALUES (1, 'data');
UPDATE mytable SET column1 = 'new_value' WHERE id = 1;
DELETE FROM mytable WHERE id = 1;
F.29.4.2. Tablo Bazında Kontrol
Belirli bir tablo için online_analyze'ı etkinleştirmek veya devre dışı bırakmak için ALTER TABLE komutunu kullanabilirsiniz:
-- Belirli bir tablo için online_analyze'ı etkinleştir
ALTER TABLE mytable SET (online_analyze.enable = true);
-- Belirli bir tablo için online_analyze'ı devre dışı bırak
ALTER TABLE mytable SET (online_analyze.enable = false);
-- Belirli bir tablo için eşik değerini ayarla
ALTER TABLE mytable SET (online_analyze.threshold = 100);
Not: ALTER TABLE komutu hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.
F.29.4.3. İstatistik Güncellemelerini İzleme
İstatistik güncellemelerini izlemek için pg_stat_user_tables görünümünü kullanabilirsiniz:
-- Son istatistik güncelleme zamanını görüntüle
SELECT
schemaname,
tablename,
last_autoanalyze,
last_analyze
FROM pg_stat_user_tables
WHERE tablename = 'mytable';
last_autoanalyze sütunu, online_analyze tarafından yapılan son otomatik istatistik güncellemesinin zamanını gösterir. last_analyze sütunu ise, manuel ANALYZE komutunun son çalıştırılma zamanını gösterir.
F.29.5. Fonksiyonlar
online_analyze modülü, istatistikleri yönetmek için aşağıdaki fonksiyonları sağlar:
F.29.5.1. online_analyze()
online_analyze(table_name text) returns void
Belirtilen tablo için istatistikleri manuel olarak günceller. Bu fonksiyon, normal ANALYZE komutuna benzer, ancak online_analyze modülünün eşik değerlerini dikkate almaz.
<strong>Parametreler:</strong>
table_name— İstatistikleri güncellenecek tablonun adı
<strong>Dönen Değer:</strong> void
<strong>Örnek:</strong>
-- Belirli bir tablo için istatistikleri güncelle
SELECT online_analyze('mytable');
F.29.5.2. online_analyze_reset()
online_analyze_reset(table_name text) returns void
Belirtilen tablo için online_analyze sayaçlarını sıfırlar. Bu fonksiyon, tablo için biriken değişiklik sayacını sıfırlar, böylece bir sonraki istatistik güncellemesi için eşik değerine ulaşılması gerekir.
<strong>Parametreler:</strong>
table_name— Sayaçları sıfırlanacak tablonun adı
<strong>Dönen Değer:</strong> void
<strong>Örnek:</strong>
-- Belirli bir tablo için sayaçları sıfırla
SELECT online_analyze_reset('mytable');F.29.6. Sınırlamalar
online_analyze modülü aşağıdaki sınırlamalara sahiptir:
- Modül, sadece INSERT, UPDATE, DELETE ve SELECT INTO işlemlerinden sonra istatistikleri günceller. TRUNCATE, COPY veya diğer toplu işlemler için otomatik güncelleme yapılmaz.
- İstatistik güncellemeleri, işlem sırasında gerçekleşir ve işlem süresini artırabilir. Yüksek yazma yoğunluğuna sahip sistemlerde, bu performans etkisi dikkate alınmalıdır.
- Modül, sadece tablo istatistiklerini günceller. İndeks istatistikleri güncellenmez.
- Çok büyük tablolarda, istatistik güncellemeleri uzun sürebilir. Bu durumda, eşik değerlerini artırmak veya minimum güncelleme aralığını ayarlamak gerekebilir.
- Modül, sadece normal tablolar için çalışır. Sistem katalogları veya görünümler için istatistik güncellemesi yapılmaz.
- Eşik değerlerine ulaşılmadan önce, istatistikler güncellenmez. Bu nedenle, küçük değişiklikler için istatistikler eski kalabilir.
F.29.7. Örnekler
Aşağıda, online_analyze modülünün kullanımına ilişkin örnekler verilmiştir:
F.29.7.1. Temel Örnek
-- Modülü etkinleştir
CREATE EXTENSION online_analyze;
-- Bir tablo oluştur
CREATE TABLE test_table (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
value INTEGER
);
-- Varsayılan ayarlarla, 50 INSERT işleminden sonra
-- istatistikler otomatik olarak güncellenecektir
INSERT INTO test_table (name, value)
SELECT 'name' || i, i
FROM generate_series(1, 100) i;
-- İstatistiklerin güncellendiğini kontrol et
SELECT
schemaname,
tablename,
last_autoanalyze
FROM pg_stat_user_tables
WHERE tablename = 'test_table';
F.29.7.2. Tablo Bazında Yapılandırma
-- Belirli bir tablo için eşik değerini ayarla
ALTER TABLE test_table SET (online_analyze.threshold = 100);
-- Belirli bir tablo için online_analyze'ı devre dışı bırak
ALTER TABLE test_table SET (online_analyze.enable = false);
-- Manuel olarak istatistikleri güncelle
SELECT online_analyze('test_table');
Not: ALTER TABLE komutu hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.
F.29.7.3. Performans İzleme
-- Tüm tablolar için son istatistik güncelleme zamanlarını görüntüle
SELECT
schemaname,
tablename,
last_autoanalyze,
last_analyze,
n_tup_ins,
n_tup_upd,
n_tup_del
FROM pg_stat_user_tables
ORDER BY last_autoanalyze DESC NULLS LAST;
Bu sorgu, hangi tabloların ne zaman son kez otomatik olarak analiz edildiğini ve kaç INSERT, UPDATE, DELETE işlemi yapıldığını gösterir. pg_stat_user_tables görünümü hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.
F.29.8. Yazarlar
online_analyze modülü Postgres Professional tarafından geliştirilmiştir.
<strong>Postgres Professional</strong><br/>Moskova, Rusya<br/><a href="https://postgrespro.com" target="_blank">https://postgrespro.com</a>