日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

SQL診斷

Hologres提供慢Query日志,默認采集大于100ms的DML和所有DDL。基于慢Query日志的數據,Hologres提供SQL診斷的能力,通過對不同維度的趨勢、明細分析,可以輔助您了解實例的使用情況并做相應的優化,以達到更好的效果。本文為您介紹如何使用SQL診斷。

功能介紹與建議

當前SQL診斷支持的診斷內容如下:

診斷項

說明

Query總數

所選時間段的Query總數。

成功Query

所選時間段成功的Query總數。

失敗Query

所選時間段失敗的Query總數。

失敗Query明細

展示錯誤碼和對應的失敗次數,方便治理錯誤的Query,同時展示出典型的Query和錯誤明細。

您可以跳轉至Query洞察查看更詳細的內容,也可以通過錯誤碼對照表查看詳細的錯誤原因,以提升實例穩定性。

成功和失敗Query趨勢

展示所選時間段的成功和失敗的Query次數比例,方便了解當前實例的Query整體運行情況。

Query耗時占比趨勢

展示所選時間段的Query耗時占比趨勢。

默認只分析SELECTINSERTUPDATEDELETE這四類Query的耗時占比情況。

DML趨勢

展示DML Query的執行次數趨勢。

默認只分析SELECTINSERTUPDATEDELETE這四類Query。

DDL趨勢

展示DDL Query的執行次數趨勢。

僅包含CREATE TABLEDROP TABLETRUNCATE TABLEALTER TABLECALLCREATE EXTENSIONCREATE FOREIGN TABLEALTER FOREIGN TABLEIMPORT FOREIGN SCHEMADROP FOREIGN TABLECREATE SCHEMACREATE VIEWDROP VIEWGRANTCREATE ROLEALTER ROLECOMMENT這些DDL。

Query應用來源占比情況或趨勢

展示application_name維度的Query占比情況或趨勢。

可以從占比中分析占比較多的應用,同時也建議給不同的任務類型設置相關的application_name,這樣可以更好的應用來源占比圖和趨勢圖,觀察異常任務。

用戶維度的Query占比情況或趨勢

展示usename維度的Query占比情況或趨勢。

可以更加明顯地分析出用戶Query執行情況,同時也建議不同的任務使用不同的用戶名,而不是使用同一個賬號,以便更好地排查異常。

執行引擎的Query趨勢

展示所選時間段內,不同執行引擎的Query執行趨勢。

Hologres根據Query的特征,會有不同的執行引擎,包括HQE、PQE、SDK或FixedQE等,詳情請參見產品架構。建議您盡量避免PQE的查詢,而是改寫成HQE的Query,以便獲得更好的性能。

注意事項

  • SQL診斷的數據去除了系統相關的SQL,篩選條件如下:

    WHERE
    usename != 'system'
    AND client_addr != '127.0.0.1' 
    AND (application_name IS NULL 
    OR application_name NOT IN ('AutoPartition', 'holoweb_system', 'HgGenInQuery'))
  • hologres.hg_query_log表默認只能查詢大于1s的DML和所有DDL,SQL診斷默認分析大于100ms的所有DML和DDL,如果您發現hologres.hg_query_log統計的數據少于SQL診斷時,一般是因為hologres.hg_query_log只統計了大于1s的Query,您可以通過修改log_min_duration_statement參數采集大于100ms的Query,詳情請參見log_min_duration_statement

  • SQL診斷同慢Query日志,只能查看近一個月的數據。

  • 數據是T+1更新。因此只能查T-1(昨天)及之前一個月的數據,可以根據業務情況進行時間維度的篩選。默認展示前一天的數據。可以根據業務情況進行時間維度的篩選。

  • SQL診斷的查詢權限同慢Query日志,授予查看權限請參見授予查看權限

操作步驟

您可以通過HoloWeb可視化查看SQL診斷。

  1. 登錄HoloWeb控制臺,詳情請參見連接HoloWeb并執行查詢

  2. 單擊頂部導航欄的診斷與優化

  3. 在左側導航欄,選擇實例診斷>SQL診斷

  4. SQL診斷頁面頂部,編輯查詢條件。

    查詢條件參數:

    參數

    是否必選

    說明

    實例名

    需要查詢慢Query的實例名稱,默認是當前登錄的實例。

    時間范圍

    慢Query的時間范圍,默認選擇昨天,最多只能選擇過去一個月的數據。

  5. 單擊提交,展示查詢結果。

查詢結果示例如下:image

SQL錯誤智能診斷

對于失敗的Query,HoloWeb中的SQL編輯器會展示SQL診斷的信息,并且Query洞察支持SQL智能診斷,也會將失敗的原因和解決方案自動返回SQL編輯器并進行展示,從而幫助業務更便捷地處理失敗Query。示例如下圖。

holo1

錯誤碼對照表

錯誤碼

說明

常見的完整報錯

解決方法

HG_ERRCODE_FDW_ERROR

MaxCompute外部表的元數據導入至Hologres時產生報錯,通常是由于不支持某種類型的表所導致。

failed to import foreign schema from odps: Can't find file system factory

詳情請參見HG_ERRCODE_FDW_ERROR

ERRCODE_FDW_ERROR

外部表查詢出現報錯。

  • failed to import foreign schema from odps: Authorization Failed:xxx

  • failed to import foreign schema from odps:Table not found -xxx

根據具體的報錯解決,詳情請參見ERRCODE_FDW_ERROR

  • ERRCODE_UNIQUE_VIOLATION

  • pk violates

違反唯一性約束,常出現在寫入時主鍵重復的場景。

duplicate key value violates unique constraint DETAIL: xxx already exists.

  • 處理主鍵重復的數據。

  • 若是INSERT語法報錯 ,可以改寫成insert into xx on conflict的語法,實現主鍵去重,詳情請參見INSERT ON CONFLICT(UPSERT)

  • 若是insert into xx on conflict語法報錯,為數據源有重復數據導致,解決方法請參見INSERT ON CONFLICT(UPSERT)

  • ERRCODE_CHECK_VIOLATION

  • partition constraint

違反檢查約束,常發生在寫入Hologres分區表時,寫入的分區值與設置的分區值不一致。例如20240301的分區寫入了0240229的分區數據。

new row for relation xx violates partition constraint DETAIL: Failing row contains (column1)=(xxxx).

需要檢查分區數據和設置的分區值是否一致,并修改為一致。

  • ERRCODE_NOT_NULL_VIOLATION

  • not-null constraint

  • UsageProblem

違反非空約束。常發生在非空(not null)字段寫入了空(null)數據。

null value in column xxx violates not-null constraint DETAIL: Failing row contains (null).

處理臟數據。

ERRCODE_UNDEFINED_TABLE

表不存在,一般出現在表剛剛創建未更新元數據或者Query執行過程中,表有TRUNCATE或DROP的場景。

Dispatch query failed: Table not found

可以使用Query洞察排查是否有同時TRUNCATE或DROP任務,然后重試任務,詳情請參見Query洞察

  • ERRCODE_INTERNAL_ERROR

  • ERPC_ERROR_CONNECTION_CLOSED

內部非預期錯誤,實例可能出現過宕機或者Query被意外中斷。

  • Transaction xx is not found or it was expired and cancelled.

  • Query is cancelled

  • ERPC_ERROR_CONNECTION_CLOSED

暫無。

  • ERRCODE_QUERY_CANCELED

  • User canceled

  • CANCELLED

  • Query Is Cancelled

  • InternalQueryIsClosed

查詢被取消,一般是因為設置了客戶端超時,或者表被TRUNCATE或DROP了。

  • ERROR: canceling statement due to statement timeout

  • canceling statement due to user request

解決方法請參見Query管理排查。

  • ERRCODE_FEATURE_NOT_SUPPORTED

  • Unsupported Feature

有某個功能不支持。

  • Dynamic partition selector is not supported

  • ALTER TABLE CHANGE OWNER is not supported in SPM (Simple Permission Mode)

  • Feature not supported: insert into parent table

解決方法請參見Hologres SQL語句的常見問題

ERRCODE_UNDEFINED_OBJECT

存在未定義的對象,一般是列不存在、Table Group不存在。

  • column xxx does not exist

  • Table group xxx does not exist.

  • 請先創建提示不存在的對象。

  • 確認報錯不存在的對象在SQL中是否填寫了正確名稱。

  • ERRCODE_INSUFFICIENT_PRIVILEGE

  • permission denied

當前賬號權限不足,需要授權。

  • ERROR: permission denied for schema xxx

  • ERROR: permission denied for foreign table table_info

解決方法請參見Hologres權限相關

  • ERRCODE_OUT_OF_MEMORY

  • OOM

Query因為內存不足,出現了OOM。

Total memory used by all existing queries exceeded memory limitation

解決方法請參見OOM常見問題排查指南

  • ERRCODE_DATATYPE_MISMATCH

  • Unmatched Data Row Schema Number

  • Dataset Schema Not Match

類型不匹配,通常為表達式需要的類型與字段的實際類型不匹配。

  • unmatched data row schema number

  • Datasets has different schema

檢查SQL的列是否匹配。

  • ERRCODE_DIVISION_BY_ZERO

  • division by zero

SQL中存在除數為0的情況。

division by zero

處理臟數據,或者使用GUC使除以0不報錯,詳情請參見函數使用

ERRCODE_STRING_DATA_RIGHT_TRUNCATION

字符串右截斷,多發生于VARCHAR字段的實際值超過了建表時VARCHAR指定的長度。

value too long for type character varying(xx)

重新建表修改VARCHAR字段的長度,或者將字段類型設置為TEXT。

  • ERRCODE_PROGRAM_LIMIT_EXCEEDED

  • Exceed Odps Scan Limit

超過Hologres允許的上限,通常發生在掃描外部表分區表數量、讀的行數、讀的字節等超過上限。

  • number of read rows (xxxxx) exceeds limit (xxxxxxx)

  • number of partitions (xxx) scanned for "xxxx" exceeds the maximum allowed (xxx)

  • scan (xxx GB) for "xxxxx" exceeds the maximum allowed (xxx GB)

外部表查詢超過了限制,解決方法請參見對接MaxCompute常見問題與診斷

ERRCODE_SYNTAX_ERROR

SQL語法錯誤。

syntax error at or near "xxxxx"

請您重新檢查SQL語法。

ERRCODE_UNDEFINED_FUNCTION

一般為不支持的函數功能,可能是因為函數語法使用錯誤,或者未創建Extension等,也可能是不支持某個函數。

  • function xxxxx does not exist

  • operator does not exist: xxxxxx

請根據函數的語法進行操作,避免語法錯誤或者Extension未創建等,詳情請參見函數參考

ERRCODE_E_R_E_READING_SQL_DATA_NOT_PERMITTED

沒有外部表的讀權限。

check permission for foreign table scan failed: failed to check permission:MaxCompute error,Authorization Failed [4019], You have NO privilege 'odps:Select' on {xxxxxxxxxx}

解決方法請參見MaxCompute權限相關

  • ERRCODE_DUPLICATE_OBJECT

  • already exist

存在重復的對象,通常發生于創建重復的Extension、Publication、Role等。

  • publication "xxxxx" already exists

  • extension "xxxxx" already exists

  • role "xxxxxxxx" already exists

如果對象已經存在,不需要重復創建。

  • ERRCODE_INVALID_TEXT_REPRESENTATION

  • invalid input

非法的文本表達式,常發生于字符串轉換為其他類型時,字符串的數據非法,比如空字符串("")轉INT。

invalid input syntax for integer: xxx

處理臟數據。

ERRCODE_BAD_COPY_FILE_FORMAT

執行copy命令時文件或數據的格式不正確,多發生于數據本身就包含了copy指定的分割符(比如空格),導致列的數量對不上。

  • extra data after last expected column. failed to query next

  • missing data for column "xxx". failed to query next

處理臟數據。

ERRCODE_UNDEFINED_COLUMN

Query中有不存在的列。

column xxxxx does not exist

重新檢查SQL語法。

ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE

數值類型超過范圍:

  • numeric類型數據超過了numeric定義的范圍,比如類型為decimal(4,2)numeric(4,2)時,整數部分最多兩位,但實際數據為100。

  • int或bigint超過了表示范圍。

  • value "xxxxx" is out of range for type bigint

  • numeric field overflow

  • bigint out of range

  • integer out of range

檢查是否有臟數據或者類型定義錯誤,重新修改列類型。

ERRCODE_DATETIME_FIELD_OVERFLOW

timestamp、timestamptz、date、time、timetz等時間相關的字段存在值溢出,比如"877411-01-01 00:00:00+08"寫入至timestamptz類型。

  • date/time field value out of range: "xxxxxx"

  • date out of range: "xxxxxx"

處理臟數據。

ERRCODE_INVALID_PARAMETER_VALUE

非法參數值,一般是各種情況下的參數不符合要求。根據具體報錯信息改進。例如報錯:column "col" with type "float4" cannot be set as "bitmap_columns" 表示float4類型不能設置為bitmap columns。

  • mismatched properties: table orientation is "column" but storage format is "sst"

  • resharding insert select table data failed : Dispatch query failed: internal error: Failed to get available shards for query

  • InsertOverwrite insert select table data failed : column a.unsign_type does not exist

重新檢查SQL語法。

ERRCODE_INVALID_DATETIME_FORMAT

非法的日期格式,日期數據不符合格式要求,比如SELECT TO_DATE('aa', 'YYYY-MM-DD');,請檢查數據。

  • invalid input syntax for type timestamp: ""

  • invalid input syntax for type date: ""

  • invalid value "" for "yyyy",Value must be an integer.

處理臟數據。

ERRCODE_CHARACTER_NOT_IN_REPERTOIRE

字符不在編碼范圍,常見于出現了UTF-8編碼之外的非法字符。

invalid byte sequence for encoding "UTF8": 0xe9 0x80

處理臟數據。

ERRCODE_DUPLICATE_TABLE

重復的表,常見表已經存在時,又重復建同名表。

relation "xxxx" already exists

如果表已經存在,則不需要重復創建。

ERRCODE_UNTRANSLATABLE_CHARACTER

存在字符無法轉化為目標格式。

character with byte sequence 0xe4 0x9e 0xab in encoding "UTF8" has no equivalent in encoding "GBK"

說明

表示UTF-8編碼的字符在目標GBK格式中無等價項。

處理臟數據。

ERRCODE_GROUPING_ERROR

分組錯誤,group by相關的錯誤。

column "xxx" must appear in the GROUP BY clause or be used in an aggregate function

重新檢查SQL語法,聚合函數的字段需要包含在group by內。

  • ERRCODE_INVALID_TRANSACTION_STATE

  • Usage Problem

非法的事務狀態。涉及事務的相關操作非法。 比如CALL SET_TABLE_PROPERTY創建Distribution Key時和建表不在一個事務中。

SET_TABLE_PROPERTY and CREATE TABLE statement are not in the same transaction

create table語句需要和CALL SET_TABLE_PROPERTY在一個事務里(使用begin;commit;)。

ERRCODE_AMBIGUOUS_COLUMN

模棱兩可的列。一般是SQL中同一列名可能是不同列時報錯,例如select id from t1 inner join t2 on t1.id = t2.id語句中,查詢的id字段沒有指明是屬于t1還是t2。

column reference "xxx" is ambiguous

重新檢查SQL語法。

ERRCODE_DUPLICATE_COLUMN

重復列,常發生在建表時同一字段聲明了多次。

column "xxx" specified more than once

重新檢查SQL語法。

ERRCODE_AMBIGUOUS_FUNCTION

模棱兩可的函數。一般是函數支持多種類型的入參,但傳參的類型沒有指定清楚。

如函數to_char有to_char(timestamp/timestamptz, text)

to_char(double precision, text)to_char(int, text)三種形式,當輸入為to_char('2024-02-22', 'YYYY-MM-DD')時由于'2024-02-22'非以上三種形式類型,就會報錯。 需要顯式指定類型轉換方可成功:to_char('2024-02-22'::timestamptz, 'YYYY-MM-DD')

重新檢查SQL語法。

ERRCODE_INVALID_COLUMN_DEFINITION

非法的列定義,在Hologres中多是Numeric或Decimal類型未指明精度。

invalid definition of a numeric type

處理臟數據。

ERRCODE_INVALID_CATALOG_NAME

ERRCODE_UNDEFINED_DATABASE

指定的數據庫不存在。

暫無

檢查數據庫是否存在。

ERRCODE_CANNOT_COERCE

兩個類型數據之間無法轉化時報錯。

cannot cast type date to integer

重新檢查SQL語法。

ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST

依賴的對象仍存在,常見于刪除一個對象時,依賴其的對象仍然存在。比如刪除一個Schema時, 該Schema下的表還未刪除。

暫無

處理相關依賴,詳情請參見刪除賬號

ERRCODE_UNDEFINED_SCHEMA 或

ERRCODE_INVALID_SCHEMA_NAME

指定的Schema不存在。

schema "xxxx" does not exist

檢查Schema是否存在,不存在需要先創建。

ERRCODE_DUPLICATE_DATABASE

重復的數據庫,創建一個已存在的數據庫時報錯。

暫無

如果數據庫已經存在,無需重復創建。

AutoAnalyze-Failed

Auto Analyze因為某些原因失敗。

  • query row count from analyze table

  • query from analyze table

Auto Analyze失敗,一般為后端原因,請提工單排查。

Import Foreign Table Not Found

找不到外部表。

  • failed to get foregin table split:Table not found

  • Failed to get odps table:Not enable acid table

  • failed to get foregin table split:% not found

請檢查訪問的外部表的是否存在。

Cannot Acquire Lock In Time

這個異常通常是由于拿鎖失敗,高并發查詢和刪除(Drop)同一張表時,后端節點出現死鎖,導致有關這張表的操作都卡住,從而報錯。

internal error: Cannot acquire lock in time, current owners

解決方法請參見鎖以及排查鎖

  • OTHER

  • QueryNextFTEFailed

  • QueryNextPQEFailed

  • ForeignSplitOrSchemaConnectionClosed

  • ConnectionRefused

  • ERPC_ERROR_TIMEOUT

  • ERPC_ERROR_CONNECTION_CLOSED

非預期的報錯。

  • kConnectError: channel is empty

  • ERPC_ERROR_CONNECTION_CLOSED

  • internal error: Connect timeout, err: std_exception: Connection refused

非預期的報錯,可以提工單排查。