Tüm Ürünler
Search
Belge Merkezi

Hologres:Manage queries

Son Güncelleme:Oct 06, 2026

Bir Hologres örneğinde çalışan sorguları tanılama ve yönetme.

Genel bakış

Hologres, PostgreSQL ile uyumludur. Bir örnekteki sorgu çalışma süresini izlemek için hg_stat_activity (pg_stat_activity) görünümü kullanın. Bu konuda aşağıdaki işlemler açıklanmaktadır:

Not

Hologres, sorgu başına bellek veya CPU sınırlamasını desteklemez. Sorgu kaynaklarını kontrol etmek için iş yükü kaynaklarını yönetmek ve zamanlamak amacıyla bir sorgu kuyruğu kullanın.

SQL kullanarak aktif sorguları görüntüleme

Aktif sorguları görüntülemek için aşağıdaki SQL ifadelerini kullanın:

  1. Aktif sorguları, yürütme aşamalarını ve kaynak tüketimini görüntüleyin.

    Not

    Süper kullanıcılar tüm kullanıcıların çalışma zamanı bilgilerini görüntüleyebilir. Diğer kullanıcılar yalnızca kendi bilgilerini görebilir.

    -- For Hologres V2.0 and later
    SELECT query,state,query_id,transaction_id,running_info, extend_info 
    FROM hg_stat_activity 
    WHERE state = 'active' 
    AND     backend_type = 'client backend'
    AND     application_name != 'hologres'
    
    -- For Hologres V1.3 and earlier
    SELECT query,state,pid
    FROM pg_stat_activity 
    WHERE state = 'active' 
    AND     backend_type = 'client backend'
    AND     application_name != 'hologres'

    Örnek sonuç:

    -------------------------------------------------------------------------------
    query          | insert into test_hg_stat_activity select i, (i % 7) :: text, (i % 1007) from generate_series(1, 10000000)i;
    state          | active
    query_id       | 100713xxxx
    transaction_id | 100713xxxx
    running_info   | {"current_stage" : {"stage_duration_ms" :5994,
                                          "stage_name" :"EXECUTE" },
                       "engine_type" :"{HQE,PQE}",
                       "fe_id" :1,
                       "warehouse_id" :0 }
    extend_info    | {"affected_rows" :9510912,
                      "scanned_rows" :9527296 }
  2. Çalışan sorguları CPU tüketimine göre sıralayın.

    -- For Hologres V2.0 and later
    SELECT query,((extend_info::json)->'total_cpu_max_time_ms')::text::bigint AS cpu_cost,state,query_id,transaction_id 
    FROM hg_stat_activity WHERE state = 'active' ORDER BY 2 DESC;

    Örnek sonuç:

    ---------------------------------------------------------------------------------
    query          | select xxxxx
    cpu_cost       | 523461
    state          | active
    query_id       | 10053xxxx
    transaction_id | 10053xxxx
    ---------------------------------------------------------------------------------
    query          | insert xxxx
    cpu_cost       | 4817
    state          | active
    query_id       | 1008305xxx
    transaction_id | 1008305xxx
  3. Çalışan sorguları bellek tüketimine göre sıralayın.

    -- For Hologres V2.0 and later
    SELECT query,((extend_info::json)->'total_mem_max_bytes')::text::bigint AS mem_max_cost,state,query_id,transaction_id 
    FROM hg_stat_activity WHERE state = 'active' ORDER BY 2 DESC;

    Örnek sonuç:

    ---------------------------------------------------------------------------------
    query          | update xxxx;
    mem_max_cost   | 5727634542
    state          | active
    query_id       | 10053302784827629
    transaction_id | 10053302784827629
    ---------------------------------------------------------------------------------
    query          | select xxxx;
    mem_max_cost   | 19535640
    state          | active
    query_id       | 10083259096119559
    transaction_id | 10083259096119559
  4. Geçerli örnekte uzun süredir çalışan sorguları görüntüleyin.

    -- For Hologres V2.0 and later
    SELECT current_timestamp - query_start AS runtime, datname::text, usename, query, query_id
        FROM hg_stat_activity
        WHERE state != 'idle'
        AND backend_type = 'client backend'
        AND application_name != 'hologres'
        ORDER BY 1 DESC;
    
    -- For Hologres V1.3 and earlier
    SELECT current_timestamp - query_start AS runtime, datname::text, usename, query, pid
        FROM pg_stat_activity
        WHERE state != 'idle'
        AND backend_type = 'client backend'
        AND application_name != 'hologres'
        ORDER BY 1 DESC;

    Örnek sonuç:

    runtime          |  datname  | usename  | query_id    |      current_query
    -----------------+----------------+----------+------------------------------------
     00:00:24.258388 | holotest  | 123xxx   | 1267xx | UPDATE xxx;
     00:00:1.186394  | testdb    | 156xx    | 1783xx | select xxxx;

    UPDATE ifadesi 24 saniyedir tamamlanmadan çalışmaktadır.

HoloWeb'de aktif sorguları yönetme

HoloWeb konsolunda aktif sorguları görüntüleyin ve yönetin.

  1. HoloWeb konsolunda oturum açın. HoloWeb'e bağlanma ve sorgu çalıştırma.

  2. Üst gezinme çubuğunda Diagnostics and Optimization seçeneğine tıklayın.

  3. Sol gezinme bölmesinde Management for Information About Active Queries > Active Query Tasks seçeneğini belirleyin.

  4. Active Query Tasks sayfasında, geçerli örnek için aktif sorguları görüntülemek ve yönetmek üzere Search öğesine tıklayın.

    Sonuçlar aşağıdaki alanları içerir:

    Parametre

    Açıklama

    Sorgu başlangıcı

    Sorgunun ne zaman başladığı.

    Çalışma süresi

    Yürütme süresi.

    PID

    Sorguyu işleyen arka uç sürecinin kimliği.

    Sorgu

    Çalıştırılan SQL ifadesi.

    Durum

    Bağlantı durumu. Yaygın değerler:

    • active: Sorgu çalışıyor.

    • idle: Bağlantı boşta.

    • idle in transaction: Bir işlem içinde boşta.

    • idle in transaction (Aborted): Başarısız bir işlem içinde boşta.

    • \N: Boş durum, genellikle bir sistem arka plan sürecidir. Yok sayılabilir.

    Kullanıcı adı

    Geçerli bağlantının kullanıcı adı.

    Uygulama

    Sorguyu başlatan uygulama.

    İstemci adresi

    İstemci IP adresi.

    Uzun süren bir sorguyu sonlandırmak için ilgili satırın Actions sütunundaki Cancel seçeneğine tıklayın. Birden çok sorgu seçip Batch Cancel seçeneğine de tıklayabilirsiniz.

  5. (İsteğe bağlı) Sorgu ayrıntılarını görüntülemek için Actions sütunundaki Details seçeneğine tıklayın.

    Details sayfasında şunları yapabilirsiniz:

    • Copy: SQL ifadesini kopyalayın.

    • Format: SQL ifadesini biçimlendirin.

Kilit sorunlarını giderme

Bir SQL ifadesinin kilit tutup tutmadığını veya bir kilit tarafından engellenip engellenmediğini belirlemek için aktif sorguları kontrol edin. Kilitler ve kilit sorun giderme.

Bir sorguyu sonlandırma

Performansı düşük olan sorguları aşağıdaki komutlarla sonlandırın.

  • Tek bir sorguyu sonlandırma:

    SELECT pg_cancel_backend(<pid>);
  • Birden çok sorguyu toplu olarak sonlandırma:

    SELECT pg_cancel_backend(pid)
            ,query
            ,datname
            ,usename
            ,application_name
            ,client_addr
            ,client_port
            ,backend_start
            ,state
    FROM    pg_stat_activity
    WHERE   length(query) > 0
    AND     pid != pg_backend_pid()
    AND     backend_type = 'client backend'
    AND     application_name != 'hologres'

Aktif sorgu zaman aşımını değiştirme

Aktif sorgular için çalıştırma zaman aşımını değiştirin.

  • Sözdizimi

    SET statement_timeout = <time>;
  • Parametre açıklaması

    time: Zaman aşımı değeri. Aralık: 0 ila 2147483647. Varsayılan birim: milisaniye. Farklı bir birim kullanmak için değeri ve birimi tek tırnak içine alın. Varsayılan: 10 saat. Bu ayar oturuma özeldir.

    Not

    Zaman aşımının uygulanması için SET statement_timeout = <time> ifadesi, hedef SQL ifadesiyle aynı toplu işte çalıştırılmalıdır.

  • Kullanım örnekleri

    • Zaman aşımını 5.000 dakika olarak ayarlayın. Bir birim belirtildiği için değeri tek tırnak içine alın.

      SET statement_timeout = '5000min' ; 
      SELECT * FROM tablename;
    • Zaman aşımını 5.000 ms olarak ayarlayın.

      SET statement_timeout = 5000 ; 
      SELECT * FROM tablename;

Boşta kalan sorgu zaman aşımını değiştirme

idle_in_transaction_session_timeout parametresi, boşta kalan işlemlerin ne zaman sonlandırılacağını kontrol eder. Bu ayar yapılmazsa boşta kalan işlemler asla zaman aşımına uğramaz ve bu durum kilitlenmelere neden olabilir.

  • Kullanım senaryoları

    Bu zaman aşımını, sızan işlemlerden kaynaklanan kilitlenmeleri önlemek için ayarlayın. Örneğin, aşağıdaki işlem COMMIT ifadesi eksik olduğu için hiçbir zaman commit edilmez ve bu durum veritabanı düzeyinde kilitlenmeye yol açabilecek bir işlem sızıntısına neden olur.

    BEGIN; 
    SELECT * FROM t;

    Bu sorunu çözmek için idle_in_transaction_session_timeout değerini ayarlayın. Açık bir işlem idle_in_transaction_session_timeout tarafından belirtilen süre içinde commit edilmez veya geri alınırsa sistem işlemi otomatik olarak geri alır ve bağlantıyı kapatır.

  • Sözdizimi

    -- Modify the idle transaction timeout at the session level.
    SET idle_in_transaction_session_timeout=<time>;
    
    -- Modify the idle transaction timeout at the database level.
    ALTER database db_name SET idle_in_transaction_session_timeout=<time>;
  • Parametre açıklaması

    time: Zaman aşımı değeri. Aralık: 0 ila 2147483647. Varsayılan birim: milisaniye. Farklı bir birim kullanmak için değeri ve birimi tek tırnak içine alın. Varsayılan: Hologres V0.10 ve önceki sürümlerde 0 (otomatik sonlandırma yok); Hologres V1.1 ve sonraki sürümlerde 10 dakika. 10 dakikadan daha uzun süre boşta kalan işlemler geri alınır.

    Not

    Aşırı kısa bir zaman aşımı ayarlamayın. Sistem, hala kullanımda olan işlemleri geri alabilir.

  • Kullanım örnekleri

    Zaman aşımını 300.000 ms olarak ayarlayın.

    -- Modify the idle transaction timeout at the session level.
    SET idle_in_transaction_session_timeout=300000;
    
    -- Modify the idle transaction timeout at the database level.
    ALTER database db_name SET idle_in_transaction_session_timeout=300000;

Yavaş sorgu günlüklerini sorgulama

Hologres V0.10 ve sonraki sürümler yavaş sorgu günlüklerini destekler. Yavaş sorgu günlüklerini görüntüleme ve analiz etme.

SSS

  • Belirti

    Bir SQL ifadesi çalıştırıldığında aşağıdaki hata döndürülür: ERROR: canceling statement due to statement timeout.

  • Nedenler ve çözümler

    • Neden 1: İstemcide veya Hologres örneğinde bir zaman aşımı yapılandırılmıştır. Yaygın zaman aşımı ayarları:

      • Data Service API'lerinin değiştirilemeyen sabit bir zaman aşımı vardır: 10s. Çalıştırma süresini azaltmak için SQL ifadelerinizi optimize edin.

      • HoloWeb veya DataWorks'teki Hologres SQL modülünün sabit bir sorgu zaman aşımı vardır: 1h. Çalıştırma süresini azaltmak için SQL'inizi optimize edin.

      • Örnek düzeyinde bir zaman aşımı ayarlanmıştır. Kontrol etmek için aşağıdaki SQL'i çalıştırın. Hataya örnek zaman aşımı neden oluyorsa gerektiği gibi ayarlayın.

        SHOW statement_timeout;
      • İstemcide veya uygulamada bir zaman aşımı ayarlanmıştır. İstemci zaman aşımı ayarlarını kontrol edin ve gerektiği gibi değiştirin.

    • Neden 2: Bir DML ifadesi çalışırken tabloda DROP veya TRUNCATE işlemi gerçekleştirilmiştir.

      TRUNCATE işlemi drop+create işlemine eşdeğerdir. Çalışan bir DML ifadesi satır veya tablo kilidi tutar (Kilitler ve kilit sorun giderme). Aynı tablo üzerinde eşzamanlı bir DROP veya TRUNCATE işlemi bu kilit için yarışır ve sistemin DML ifadesini statement timeout hatasıyla iptal etmesine neden olur.

      Çözüm: Tablo üzerinde eşzamanlı DROP veya TRUNCATE işlemleri olup olmadığını görmek için yavaş sorgu günlüğünü kontrol edin ve bunlardan kaçının.

      -- Example: Query the logs for drop/truncate operations on a specific table over the past day.
      SELECT * FROM hologres.hg_query_log 
      WHERE command_tag IN ('DROP TABLE','TRUNCATE TABLE') 
      AND query LIKE '%xxx%' AND query_start >= now() - interval '1 day';