Tüm Ürünler
Search
Belge Merkezi

ApsaraDB for SelectDB:Sorgu profili

Son Güncelleme:Oct 08, 2026

Sorgu profilleri, her sorgu için düğüm başına çalıştırma ayrıntılarını yakalar. Performans darboğazlarını tespit etmek ve sorgu performansını optimize etmek için bu profilleri kullanın.

Sorgu profillerini etkinleştirin

Profil toplamayı başlatmak için enable_profile değişkenini ayarlayın:

SET enable_profile=true;
Not

enable_profile değeri true olarak ayarlandığında SelectDB, çalışan her sorgu için bir profil oluşturur. Her profil, tüm düğümlerdeki çalıştırma ayrıntılarını kaydeder.

Sorgu profillerini görüntüleyin

Önemli

SHOW QUERY PROFILE ifadesi yalnızca V4.0.0'dan önceki SelectDB Core sürümlerinde desteklenir. SelectDB Core V4.0.0 ve sonraki sürümler için sorgu profillerini SelectDB konsolundan önizleyin veya indirin ya da HTTP API'sini kullanın. Ayrıntılar için Sorgu denetimi özelliğini kullanın ve Sorgu profillerini dışa aktarın konularına bakın.

Depolanan tüm profilleri listelemek için aşağıdaki ifadeyi çalıştırın:

SHOW QUERY PROFILE "/"\G;

Sonuçtaki her satır bir profile karşılık gelir:

SHOW QUERY PROFILE "/"\G
*************************** 1. row ***************************
   Profile ID: c257c52f93e149ee-ace8ac14e8c9fef9
    Task Type: QUERY
   Start Time: 2021-04-08 11:30:50
     End Time: 2021-04-08 11:30:50
        Total: 9ms
   Task State: EOF
         User: root
   Default Db: default_cluster:db1
Sql Statement: select tbl1.k1, sum(tbl1.k2) from tbl1 join tbl2 on tbl1.k1 = tbl2.k1 group by tbl1.k1 order by tbl1.k1
Not

HTTP API yanıtlarında Query ID ve query_id alanları profil kimliğini ifade eder.

Sorgu profillerini analiz edin

Bir sorgudaki performans darboğazını bulmak için aşağıdaki üç adımlı iş akışını kullanın. Her adım, çalıştırma hiyerarşisinde bir seviye daha derine iner.

Adım 1: En yavaş parçayı belirleyin

Amaç: Birincil darboğazın hangi parça olduğunu bulun.

Çalıştırma planı ağacı, parça yapısını ve her parçanın çalıştırma süresini gösterir. Her gönderici düğümdeki MaxActiveTime değeri, ilgili parçadaki tüm çalıştırma birimleri arasındaki en uzun çalıştırma süresidir.

SHOW QUERY PROFILE "/<profile_id>"\G

Örnek çıktı:

SHOW QUERY PROFILE "/c257c52f93e149ee-ace8ac14e8c9fef9"\G
*************************** 1. row ***************************
Fragments:
             ┌──────────────────────┐
             │[-1: DataBufferSender]│
             │Fragment: 0           │
             │MaxActiveTime: 6.626 ms│
             └──────────────────────┘
                         │
               ┌──────────────────┐
               │[9: EXCHANGE_NODE]│
               │Fragment: 0       │
               └──────────────────┘
                         │
             ┌──────────────────────┐
             │[9: DataStreamSender] │
             │Fragment: 1           │
             │MaxActiveTime: 5.449 ms│
             └──────────────────────┘
                         │
                 ┌──────────────┐
                 │[4: SORT_NODE]│
                 │Fragment: 1   │
                 └──────────────┘
                        ┌┘
             ┌─────────────────────┐
             │[8: AGGREGATION_NODE]│
             │Fragment: 1          │
             └─────────────────────┘
                        └┐
               ┌──────────────────┐
               │[7: EXCHANGE_NODE]│
               │Fragment: 1       │
               └──────────────────┘
                         │
             ┌──────────────────────┐
             │[7: DataStreamSender] │
             │Fragment: 2           │
             │MaxActiveTime: 3.505 ms│
             └──────────────────────┘
                        ┌┘
             ┌─────────────────────┐
             │[3: AGGREGATION_NODE]│
             │Fragment: 2 │
             └─────────────────────┘
                        │
              ┌───────────────────┐
              │[2: HASH_JOIN_NODE]│
              │Fragment: 2        │
              └───────────────────┘
           ┌────────────┴────────────┐
 ┌──────────────────┐      ┌──────────────────┐
 │[5: EXCHANGE_NODE]│      │[6: EXCHANGE_NODE]│
 │Fragment: 2       │      │Fragment: 2       │
 └──────────────────┘      └──────────────────┘
           │                         │
┌─────────────────────┐ ┌────────────────────────┐
│[5: DataStreamSender]│ │[6: DataStreamSender] │
│Fragment: 4          │ │Fragment: 3             │
│MaxActiveTime: 1.87 ms│ │MaxActiveTime: 636.767 us│
└─────────────────────┘ └────────────────────────┘
           │                        ┌┘
 ┌───────────────────┐    ┌───────────────────┐
 │[0: OLAP_SCAN_NODE]│    │[1: OLAP_SCAN_NODE]│
 │Fragment: 4        │    │Fragment: 3        │
 └──────────────────┘      └──────────────────┘
           │                        │
    ┌─────────────┐          ┌─────────────┐
    │[OlapScanner]│          │[OlapScanner]│
    │Fragment: 4  │          │Fragment: 3  │
    └─────────────┘          └─────────────┘
           │                        │
  ┌─────────────────┐      ┌─────────────────┐
  │[SegmentIterator]│      │[SegmentIterator]│
  │Fragment: 4      │      │Fragment: 3      │
  └─────────────────┘      └─────────────────┘

1 row in set (0.02 sec)

Bu örnekte Fragment 1, en yüksek MaxActiveTime değerine (5,449 ms) sahiptir; bu nedenle birincil darboğaz burasıdır. Fragment 1 ile Adım 2'ye geçin.

Adım 2: En yavaş çalıştırma birimini belirleyin

Amaç: Darboğaz oluşturan parça içinde en çok zaman alan düğüm örneğini bulun.

En yavaş parçayı belirledikten sonra içindeki tüm çalıştırma birimlerini (örnekleri) listeleyin:

SHOW QUERY PROFILE "/<profile_id>/<fragment_id>";

Fragment 1 için örnek çıktı:

SHOW QUERY PROFILE "/c257c52f93e149ee-ace8ac14e8c9fef9/1";
+-----------------------------------+-------------------+------------+
| Instances                         | Host              | ActiveTime |
+-----------------------------------+-------------------+------------+
| c257c52f93e149ee-ace8ac14e8c9ff03 | 10.200.00.01:9060 | 5.449ms    |
| c257c52f93e149ee-ace8ac14e8c9ff05 | 10.200.00.02:9060 | 5.367ms    |
| c257c52f93e149ee-ace8ac14e8c9ff04 | 10.200.00.03:9060 | 5.358ms    |
+-----------------------------------+-------------------+------------+

En yüksek ActiveTime değerine sahip örnek, Adım 3 için hedefinizdir.

Adım 3: İşlenen bazlı ölçümleri inceleyin

Amaç: Hedef çalıştırma biriminde en çok zaman ve kaynağı tüketen işleci belirleyin.

SHOW QUERY PROFILE "/<profile_id>/<fragment_id>/<instance_id>"\G

Fragment 1'deki c257c52f93e149ee-ace8ac14e8c9ff03 örneği için örnek çıktı:

SHOW QUERY PROFILE "/c257c52f93e149ee-ace8ac14e8c9fef9/1/c257c52f93e149ee-ace8ac14e8c9ff03"\G
*************************** 1. row ***************************
Instance:
 ┌───────────────────────────────────────┐
 │[9: DataStreamSender]                  │
 │(Active: 37.222 us, non-child: 0.40)    │
 │  - Counters:                          │
 │      - BytesSent: 0.00                │
 │      - IgnoreRows: 0                  │
 │      - OverallThroughput: 0.0 /sec    │
 │      - PeakMemoryUsage: 8.00 KB       │
 │      - SerializeBatchTime: 0ns        │
 │      - UncompressedRowBatchSize: 0.00 │
 └───────────────────────────────────────┘
                     └┐
                      │
    ┌──────────────────────────────────┐
    │[4: SORT_NODE]                    │
    │(Active: 5.421 ms, non-child: 0.71)│
    │  - Counters:                     │
    │      - PeakMemoryUsage: 12.00 KB │
    │ - RowsReturned: 0 │
    │      - RowsReturnedRate: 0       │
    └──────────────────────────────────┘
                     ┌┘
                     │
   ┌───────────────────────────────────┐
   │[8: AGGREGATION_NODE]              │
   │(Active: 5.355 ms, non-child: 10.68)│
   │  - Counters:                      │
   │      - BuildTime: 3.701us         │
   │      - GetResultsTime: 0 ns        │
   │      - HTResize: 0                │
   │      - HTResizeTime: 1.211 us      │
   │      - HashBuckets: 0             │
   │      - HashCollisions: 0          │
   │      - HashFailedProbe: 0         │
   │      - HashFilledBuckets: 0       │
   │      - HashProbe: 0               │
   │      - HashTravelLength: 0        │
   │      - LargestPartitionPercent: 0 │
   │      - MaxPartitionLevel: 0       │
   │      - NumRepartitions: 0         │
   │      - PartitionsCreated: 16      │
   │      - PeakMemoryUsage: 34.02 MB  │
   │      - RowsProcessed: 0           │
   │      - RowsRepartitioned: 0       │
   │      - RowsReturned: 0            │
   │      - RowsReturnedRate: 0        │
   │      - SpilledPartitions: 0       │
   └───────────────────────────────────┘
                     └┐
                      │
┌──────────────────────────────────────────┐
│[7: EXCHANGE_NODE]                        │
│(Active: 4.360 ms, non-child: 46.84)       │
│  - Counters:                             │
│      - BytesReceived: 0.00               │
│      - ConvertRowBatchTime: 387 ns        │
│      - DataArrivalWaitTime: 4.357 ms      │
│      - DeserializeRowBatchTimer: 0 ns     │
│      - FirstBatchArrivalWaitTime: 4.356 ms│
│      - PeakMemoryUsage: 0.00             │
│      - RowsReturned: 0                   │
│      - RowsReturnedRate: 0               │
│      - SendersBlockedTotalTimer(*): 0 ns  │
└──────────────────────────────────────────┘

Bir düğümde yüksek Active yüzdesi ve yüksek non-child yüzdesi, darboğazın alt işlemcide değil düğümün kendisinde olduğunu gösterir. Optimizasyon çabalarınızı buraya odaklayın.

Sorgu profillerini dışa aktarın

Önemli

Sorgu profillerini dışa aktarmak için SelectDB Core V3.0.4 veya sonraki bir sürüm gerekir.

Çevrimdışı analiz veya paylaşım amacıyla bir profili dosyaya aktarın.

  1. Sorgu profillerini etkinleştirin.

    SET enable_profile=true;
  2. Profilini oluşturmak istediğiniz sorguyu çalıştırın.

    -- Run your target query. SelectDB generates a profile for it.
    SELECT count(1) FROM test_table LIMIT 10;
  3. Profil kimliğini alın.

    SelectDB 4.0.x sürümleri

    Sorgu bilgilerini almak için bir HTTP isteği gönderin. Yanıttaki Query ID alanı profil kimliğidir.

    curl -u'<userName>:<userPassword>' \
      "http://<selectdbAddress>:<httpPort>/rest/v2/manager/query/query_info?is_all_node=true"

    Örnek yanıt:

    {
      "msg": "success",
      "code": 0,
      "data": {
        "column_names": [
          "Query ID",
          "FE Node",
          "Query User",
          "Execution Database",
          "Sql",
          "Query Type",
          "Start Time",
          "End Time",
          "Execution Duration",
          "Status"
        ],
        "rows": [
          [
            ...
          ]
        ]
      },
      "count": 0
    }

    SelectDB 3.0.x sürümleri

    Aşağıdaki örnek, SelectDB 3.0'da bilginin nasıl alınacağını göstermektedir:

    SHOW QUERY PROFILE "/";

    Örnek çıktı:

    +-----------------------------------+-----------+---------------------+---------------------+-------+------------+-------+------------------------------------+-------------------------------+
    | Profile ID                        | Task Type | Start Time          | End Time            | Total | Task State | User  | Default Db                         | Sql Statement                 |
    +-----------------------------------+-----------+---------------------+---------------------+-------+------------+-------+------------------------------------+-------------------------------+
    | b9c9ba063d9d4365-97878361371e757a | QUERY     | 2024-02-07 17:40:04 | 2024-02-07 17:40:04 | 32ms  | EOF        | admin | default_cluster:information_schema | select * from user_privileges |
    | 8800c306137e4072-9bb1ed419f4ac9f2 | QUERY     | 2024-02-07 17:40:00 | 2024-02-07 17:40:00 | 3ms   | ERR        | admin | default_cluster:information_schema | select * from user_priveleges |
    | e2efdd1a996c4de2-ab939ad49b409990 | QUERY     | 2024-02-07 17:39:51 | 2024-02-07 17:39:51 | 13ms  | EOF        | admin |                                    | SELECT DATABASE()             |
    +-----------------------------------+-----------+---------------------+---------------------+-------+------------+-------+------------------------------------+-------------------------------+
  4. Kimliğini kullanarak profili dışa aktarın.

    Yer Tutucu Açıklama Varsayılan
    <userName> SelectDB örneğine erişmek için kullanıcı adı —
    <userPassword> SelectDB örneğine erişmek için parola —
    <selectdbAddress> SelectDB örneğinin uç noktası —
    <httpPort> HTTP bağlantı noktası numarası 8080
    <query_id> 3. adımdaki profil kimliği —
    curl -u'<userName>:<userPassword>' \
      "http://<selectdbAddress>:<httpPort>/api/profile?query_id=<query_id>"

    Çıktıyı bir dosyaya kaydetmek için yanıtı yönlendirin:

    curl -u'<userName>:<userPassword>' \
      "http://<selectdbAddress>:<httpPort>/api/profile?query_id=<query_id>" > res.txt

    Aşağıdaki yer tutucuları gerçek değerlerinizle değiştirin:

  5. (İsteğe bağlı) Dışa aktarılan dosyayı okunabilirlik açısından biçimlendirin.

    sudo sed -r 's/\\n/\n/g' res.txt | sed -r 's/\\t/\t/g' > new.txt

Profil parametre referansı

Aşağıdaki tablolar, bir sorgu profilinde toplanan tüm parametreleri açıklar.

Parça

Parametre Açıklama
AverageThreadTokens İş parçacığı havuzu kullanımı hariç, parça çalıştırması için kullanılan iş parçacığı sayısı.
Buffer Pool PeakReservation Arabellek havuzunun en yüksek bellek kullanımı.
MemoryLimit Sorgu için bellek sınırı.
PeakMemoryUsage Sorgu sırasında bir çalıştırma biriminin en yüksek bellek kullanımı.
RowsProduced Sütunları işlenen satır sayısı.

BlockMgr

Parametre Açıklama
BlocksCreated BlockManager tarafından oluşturulan blok sayısı.
BlocksRecycled Yeniden kullanılan blok sayısı.
BytesWritten Disk üzerine yazılan verilerin toplam boyutu.
MaxBlockSize Tek bir bloğun boyutu.
TotalReadBlockTime Blokların okunması için harcanan toplam süre.

DataStreamSender

Parametre Açıklama
BytesSent Gönderilen verilerin toplam boyutu. Alıcı sayısı x gönderilen veri boyutu olarak hesaplanır.
IgnoreRows Filtrelenen satır sayısı.
LocalBytesSent Veri alışverişi sırasında yerel düğüm tarafından gönderilen ve yerel düğüm tarafından alınan verilerin boyutu.
OverallThroughput Toplam aktarım hızı. BytesSent / çalıştırma süresi olarak hesaplanır.
SerializeBatchTime Gönderilen verilerin serileştirilmesi için harcanan süre.
UncompressedRowBatchSize Sıkıştırma öncesi gönderilen RowBatch verilerinin boyutu.

ODBC_TABLE_SINK

Parametre Açıklama
NumSentRows Harici bir tabloya yazılan toplam satır sayısı.
TupleConvertTime Gönderilen verilerin INSERT ifadelerine serileştirilmesi için harcanan süre.
ResultSendTime Open Database Connectivity (ODBC) sürücüsü kullanılarak verilerin yazılması için harcanan süre.

EXCHANGE_NODE

Parametre Açıklama
BytesReceived Ağ üzerinden alınan verilerin boyutu.
MergeGetNext Alt düğümde sıralama yapıldığında exchange düğümü birleşik birleştirme ve sıralama gerçekleştirir. Bu, MergeGetNextBatch dahil olmak üzere birleştirme ve sıralama için harcanan toplam süredir.
MergeGetNextBatch Birleştirme düğümünün veri alması için harcanan süre. Tek düzeyli birleştirme ve sıralamada veriler ağ kuyruğundan alınır. Çok düzeyli birleştirme ve sıralamada veriler alt birleştiriciden alınır.
ChildMergeGetNext Çok sayıda gönderici veri gönderdiğinde tek iş parçacıklı birleştirme bir darboğaza neden olur. ApsaraDB for SelectDB, paralel olarak birleştirmek ve sıralamak için alt birleştirme düğümünde birden çok iş parçacığı başlatır. Bu, tüm iş parçacıklarındaki kümülatif süredir.
ChildMergeGetNextBatch Alt birleştirme düğümünün veri alması için harcanan süre. Yüksek değerler, alt veri gönderen düğümde darboğazlar olabileceğini gösterebilir.
DataArrivalWaitTime Göndericinin veri göndermesini beklemek için harcanan toplam süre.
FirstBatchArrivalWaitTime Göndericiden ilk veri grubunun gelmesini beklemek için harcanan süre.
DeserializeRowBatchTimer Ağ verilerinin seri durumdan çıkarılması için harcanan süre.
SendersBlockedTotalTimer(*) DataStreamRecv kuyruk belleği tamamen dolduğunda gönderici tarafında harcanan toplam bekleme süresi.
ConvertRowBatchTime Alınan verilerin RowBatch'e dönüştürülmesi için harcanan süre.
RowsReturned Alınan satır sayısı.
RowsReturnedRate Satırların alınma hızı.

SORT_NODE

Parametre Açıklama
InMemorySortTime Bellek içi sıralama için harcanan süre.
InitialRunsCreated Sıralamanın başlatılma sayısı. Bellek içi sıralama için değer 1 olur.
SortDataSize Sıralanan verilerin toplam boyutu.
MergeGetNext MergeSort'un birden çok sıralı çalışmadan sonraki grubu alması için harcanan süre. Yalnızca veriler diske yazıldığında ölçülür.
MergeGetNextBatch MergeSort'un sonraki sıralı çalışmanın grubunu çıkarması için harcanan süre. Yalnızca veriler diske yazıldığında ölçülür.
TotalMergesPerformed Harici birleştirmenin gerçekleştirilme sayısı.

AGGREGATION_NODE

Parametre Açıklama
PartitionsCreated Toplama sorgusunun bölündüğü bölüm sayısı.
GetResultsTime Bölümlerden toplama sonuçlarının alınması için harcanan süre.
HTResizeTime Hash tablosunun yeniden boyutlandırılması için harcanan süre.
HTResize Hash tablosunun yeniden boyutlandırılma sayısı.
HashBuckets Hash tablosundaki kova sayısı.
HashBucketsWithDuplicate Hash tablosunda yinelenen düğümlere sahip kova sayısı.
HashCollisions Hash tablosundaki hash çarpışma sayısı.
HashDuplicateNodes Hash tablosunda aynı kovaya ait yinelenen düğüm sayısı.
HashFailedProbe Hash tablosunda başarısız olan araştırma işlemi sayısı.
HashFilledBuckets Hash tablosunda verilerle doldurulan kova sayısı.
HashProbe Hash tablosunun sorgulanma sayısı.
HashTravelLength Hash tablosu sorgusu sırasında taşınan adım sayısı.

HASH_JOIN_NODE

Parametre Açıklama
ExecOption Sağ alt düğüm için hash tablosu oluşturma yöntemi: eşzamanlı veya eşzamansız.
BuildBuckets Hash tablosundaki kova sayısı.
BuildRows Hash tablosundaki satır sayısı.
BuildTime Hash tablosunun oluşturulması için harcanan süre.
LoadFactor Boş olmayan kova sayısını gösteren hash tablosunun yükleme faktörü.
ProbeRows Sol alt düğümler tarandıktan sonra hash araştırma işleminin gerçekleştirildiği satır sayısı.
ProbeTime Sol alt düğümünden RowBatch üzerinde GetNext çağrısı yapma süresi hariç, hash araştırması için sol alt düğümlerin taranması amacıyla harcanan süre.
PushDownComputeTime Yüklemeli koşul hesaplama için harcanan süre.
PushDownTime Yüklemeli koşul için harcanan toplam süre. Koşulları karşılayan sağ alt düğümlerdeki join sorguları, sol alt düğümlerde IN sorgularına dönüştürülür.

CROSS_JOIN_NODE

Parametre Açıklama
ExecOption Sağ alt düğüm için RowBatchList oluşturma yöntemi: eşzamanlı veya eşzamansız.
BuildRows RowBatchList satır sayısı (sağ alt düğümdeki satırlar).
BuildTime RowBatchList'in oluşturulması için harcanan süre.
LeftChildRows Sol alt düğümdeki satır sayısı.
LeftChildTime Sol alt düğümünden RowBatch üzerinde GetNext çağrısı yapma süresi hariç, Kartezyen çarpımı oluşturmak için sol ve sağ alt düğümlerin taranması amacıyla harcanan süre.

UNION_NODE

Parametre Açıklama
MaterializeExprsEvaluateTime Bir UNION'ın her iki tarafındaki alan türleri farklı olduğunda tür dönüşüm ifadelerini değerlendirmek ve sonuçları somutlaştırmak için harcanan süre.

ANALYTIC_EVAL_NODE

Parametre Açıklama
EvaluationTime Analitik işlev (pencere işlevi) hesaplaması için harcanan toplam süre.
GetNewBlockTime Başlatma sırasında yeni bir blok ayırmak için harcanan süre. Blok, analitik işlev hesaplaması için Rows penceresini veya tüm bir bölümü önbelleğe alır.
PinTime Yeni bir blok ayırmak veya diske yazılmış bir bloğu yeniden belleğe okumak için harcanan süre.
UnpinTime Bir blok artık gerekli olmadığında veya geçerli işlenen yüksek bellek baskısı altındayken bir bloğun verilerini diske yazmak için harcanan süre.

OLAP_SCAN_NODE

OLAP_SCAN_NODE, veri tarama görevlerini yönetir. Her biri verilerin bir bölümünü taramaktan sorumlu olan bir veya daha fazla OLAP tarayıcısı oluşturur. Profil, çağrı hiyerarşisini yansıtan üç katmanda düzenlenmiştir: OLAP_SCAN_NODE -> OlapScanner -> SegmentIterator.

Bazı veya tüm koşul koşulları OLAP_SCAN_NODE'a yüklenir. Depolama motoru dizinlerini kullanabilen koşullar filtreleme için depolama motoruna daha da yüklenir; geri kalanlar ise OLAP_SCAN_NODE içinde değerlendirilir.

Not

Bazı ölçüm değerleri depolama biçimine (V1 veya V2) bağlı olarak farklılık gösterir.

Aşağıdaki örnek, tipik bir OLAP_SCAN_NODE profilini göstermektedir:

OLAP_SCAN_NODE (id=0):(Active: 1.2ms, % non-child: 0.00%)
  - BytesRead: 265.00 B                 # Size of data read from data files. For example, 10 x 32-bit integers = 40 bytes. This reflects data fully loaded into memory, not raw I/O size.
  - NumDiskAccess: 1                    # Number of disks accessed by the ScanNode.
  - NumScanners: 20                     # Number of scanners created by the ScanNode.
  - PeakMemoryUsage: 0.00               # Peak memory usage during the query.
  - RowsRead: 7                         # Rows returned from the storage engine to the scanner, excluding rows filtered by the scanner.
  - RowsReturned: 7                     # Rows returned from the ScanNode to the parent node.
  - RowsReturnedRate: 6.979K /sec       # RowsReturned / ActiveTime.
  - TabletCount: 20                     # Number of tablets accessed by the ScanNode.
  - TotalReadThroughput: 74.70 KB/sec   # BytesRead divided by total execution time. For I/O-bound queries, this approaches total disk throughput.
  - ScannerBatchWaitTime: 426.886us     # Time for the transfer thread to wait for the scanner thread to return RowBatch data.
  - ScannerWorkerWaitTime: 17.745us     # Time for the scanner thread to wait for available worker threads in the thread pool.
  OlapScanner:
    - BlockConvertTime: 8.941us         # Time to convert a vectorized block to a row-structured RowBlock. The vectorized block is VectorizedRowBatch (V1) or RowBlockV2 (V2).
    - BlockFetchTime: 468.974us         # Time for the rowset reader to get blocks.
    - ReaderInitTime: 5.475ms           # Time for the OLAP scanner to initialize readers. Includes MergeHeap creation time (V1) and the time to generate all iterator levels and read the first block group (V2).
    - RowsDelFiltered: 0                # Rows filtered based on DELETE information in the tablet and rows marked for deletion in the Unique Key model.
    - RowsPushedCondFiltered: 0         # Rows filtered by predicates pushed down from a join operation (e.g., from BuildTable to ProbeTable). This value is approximate; filtering may be skipped if the effect is poor.
    - ScanTime: 39.24us                 # Time for data to travel from ScanNode to the parent node.
    - ShowHintsTime_V1: 0ns             # V1 only: time to read some data for ScanRange splitting.
    SegmentIterator:
      - BitmapIndexFilterTimer: 779ns   # Time to filter data using bitmap indexes.
      - BlockLoadTime: 415.925us        # Time for the segment reader (V1) or segment iterator (V2) to get blocks.
      - BlockSeekCount: 12              # Number of block seeks during segment reading.
      - BlockSeekTime: 222.556us        # Time consumed for block seeks during segment reading.
      - BlocksLoad: 6                   # Number of blocks read.
      - CachedPagesNum: 30              # V2 only: number of pages that hit the page cache.
      - CompressedBytesRead: 0.00       # V1: size of data before decompression read from file. V2: size of pages before compression that did not hit the page cache.
      - DecompressorTimer: 0ns          # Time consumed for data decompression.
      - IOTimer: 0ns                    # Actual I/O time for reading data from the operating system.
      - IndexLoadTime_V1: 0ns           # V1 only: time to read index streams.
      - NumSegmentFiltered: 0           # Number of segments completely filtered out based on column statistics and query conditions.
      - NumSegmentTotal: 6              # Total number of segments involved in the query.
      - RawRowsRead: 7                  # Source data rows read from the storage engine after all preceding filtering.
      - RowsBitmapIndexFiltered: 0      # V2 only: rows filtered using bitmap indexes.
      - RowsBloomFilterFiltered: 0      # V2 only: rows filtered using BloomFilter indexes.
      - RowsKeyRangeFiltered: 0         # V2 only: rows filtered using SortkeyIndex indexes.
      - RowsStatsFiltered: 0            # V2: rows filtered using ZoneMap indexes, including delete conditions. V1: includes rows filtered using BloomFilter indexes.
      - RowsConditionsFiltered: 0       # V2 only: rows filtered by all column indexes combined.
      - RowsVectorPredFiltered: 0       # Rows filtered by vectorized condition operations.
      - TotalPagesNum: 30               # V2 only: total number of pages read.
      - UncompressedBytesRead: 0.00     # V1: size of data after decompression (or file size if not compressed). V2: size of pages that did not hit the page cache after decompression (or page size if not compressed).
      - VectorPredEvalTime: 0ns         # Time to perform filtering by vectorized condition.
      - ShortPredEvalTime: 0ns          # Time to perform filtering by short-circuit predicate.
      - PredColumnReadTime: 0ns         # Time consumed for predicate column reading.
      - LazyReadTime: 0ns               # Time consumed to read non-predicate columns.
      - OutputColumnTime: 0ns           # Time consumed for column materialization.

Filtreleme ölçümlerinin birbirleriyle ilişkisi

Bir OLAP_SCAN_NODE profilindeki satır sayısı ölçümleri, koşulların ve dizinlerin her aşamada veri hacmini ne kadar etkili bir şekilde azalttığını ortaya koyar. Aşağıda V2 biçimli filtreleme sırası açıklanmaktadır. V1 biçimli ölçümlerin anlamları biraz farklıdır.

Başlatma aşaması

Filtreleme şu sırayla gerçekleşir:

  1. SortkeyIndex — Sorguda anahtar aralıkları (ön ek anahtar aralıkları) varsa veriler önce filtrelenir. Elenen satırlar RowsKeyRangeFiltered içinde kaydedilir.

  2. Bitmap dizinleri — Bitmap dizinleriyle eşleşen koşullar için doğru sütun filtrelemesi uygulanır. Elenen satırlar RowsBitmapIndexFiltered içinde kaydedilir.

  3. BloomFilter dizinleri — Eşitlik koşulları (=, IN, IS) BloomFilter dizinleri kullanılarak filtrelenir. Elenen satırlar RowsBloomFilterFiltered içinde kaydedilir.

    Not

    RowsBloomFilterFiltered, toplam bölüm satırları eksi BloomFilter filtrelemesinden sonraki kalan satırlar olarak hesaplanır. Zaten bitmap dizinleri tarafından elenen satırlarla örtüşebilir.

  4. ZoneMap dizinleri — Veriler sorgu ve silme koşullarına göre filtrelenir. Elenen satırlar RowsStatsFiltered içinde kaydedilir.

  5. RowsConditionsFiltered , RowsBloomFilterFiltered ve RowsStatsFiltered dahil olmak üzere tüm dizinler tarafından birlikte filtrelenen toplam satırdır.

Sonraki aşama

Başlatmadan sonra kalan veriler ek aşamalardan geçer:

  • RowsDelFiltered : Silme koşulları tarafından elenen satırlar. Bunlar ayrıca RowsStatsFiltered içinde de sayılır.

  • RawRowsRead : Tüm önceki filtrelemeden sonra kalan satırlar.

  • RowsRead : Depolama motorundan tarayıcıya döndürülen satırlar. Depolama motoru satırları birleştirebileceğinden bu değer genellikle RawRowsRead değerinden daha düşüktür. RawRowsRead ile RowsRead arasında büyük bir fark, performans sorunu olabilecek yoğun bir birleştirmeyi gösterir.

  • RowsReturned : ScanNode tarafından üst düğüme nihai olarak döndürülen satırlar. Depolama motoruna yüklenmeyen koşullar tarayıcı düzeyinde uygulandığından bu değer genellikle RowsRead değerinden daha düşüktür. RowsRead ile RowsReturned arasında büyük bir fark, filtrelemenin daha verimli olduğu depolama motoruna ulaşmayan birçok yüksek seçicilikli koşul olduğunu gösterir.

Rows***Filtered ölçümleri birlikte, sorgu koşullarının depolama motoruna yüklenip yüklenmediğini ve her dizin türünün ne kadar etkili olduğunu değerlendirmenizi sağlar.

Diğer ölçümler

  • OlapScanner altındaki ölçümler (IOTimer ve BlockFetchTime gibi) tüm tarayıcı iş parçacıklarında kümülatiftir. Tarayıcı iş parçacıkları verileri eşzamansız olarak okuduğundan bu birikmiş değerler toplam tarayıcı çalışma süresini yansıtır, ScanNode duvar saati süresini değil. Active yüzdesi, ScanNode'un genel çalıştırma planına katkıda bulunduğu zamanın gerçek oranını kaydeder. IOTimer onlarca saniye iken Active yalnızca birkaç saniye olması iki nedenden dolayı normaldir:

    • IOTimer paralel çalışan birçok tarayıcıda birikir.

    • Üst düğüm yavaşsa (örneğin, 100 saniye) ScanNode (10 saniye) erken biter ve arka planda verileri hazırlar. Üst düğüm ardından hazırlanan verileri alır, bu nedenle ScanNode'un Active süresi kısadır.

  • NumScanners , tarayıcının RuntimeState tarafından yönetilen iş parçacığı havuzuna gönderdiği görev sayısıdır. doris_scanner_thread_pool_thread_num ve doris_scanner_thread_pool_queue_size parametreleri iş parçacığı havuzu boyutunu ve kuyruk uzunluğunu kontrol eder. İş parçacığı sayısı çok fazla veya yetersiz olursa sorgu verimliliği etkilenir. Bazı ölçümleri iş parçacığı sayısına bölerek her iş parçacığı için harcanan süreyi kabaca tahmin edebilirsiniz.

  • TabletCount , taranacak tablet sayısıdır. Yüksek tablet sayısı, daha fazla rastgele okuma ve veri birleştirme işlemi anlamına gelir.

  • UncompressedBytesRead , okunan veri hacmini yansıtır. Yüksek bir değer, yoğun G/Ç'yi gösterebilir.

  • Sayfa önbelleği isabet oranını değerlendirmek için CachedPagesNum değerini TotalPagesNum ile karşılaştırın. Daha yüksek isabet oranı hem G/Ç hem de sıkıştırma açma ek yükünü azaltır.

Arabellek havuzu

Parametre Açıklama
AllocTime Bellek ayırma için harcanan süre.
CumulativeAllocationBytes Ayrılan belleğin kümülatif boyutu.
CumulativeAllocations Kümülatif bellek ayırma sayısı.
PeakReservation En yüksek rezervasyon boyutu.
PeakUnpinnedBytes Sabitlenmemiş bellek verilerinin boyutu.
PeakUsedReservation Rezervasyonların bellek kullanımı.
ReservationLimit Arabellek havuzundaki rezervasyon sınırı.

Sonraki adımlar