OceanBase 4.3.5 解析:DDL性能診斷

背景

DDL操作通常耗時較長,特別是涉及補數據流程的DDL語句。在執行過程中,用戶面臨兩個主要痛點:一是無法實時獲取DDL執行進度,難以區分長時間運行是正常現象還是由內部異常導致的停滯;二是執行效率經常低于預期,而傳統的問題診斷需要跨越多張系統表和視圖,操作流程復雜。為此,OceanBase 的新版本通過提供可查詢的系統視圖來簡化DDL性能問題排查。

使用說明

SESSION_LONGOPS視圖輸出行為變更

變更了 SESSION_LONGOPS視圖中 DDL 處于REDEFINITION階段時 message列的輸出邏輯 。其他保持和原有的一致。

DDL 處于REDEFINITION階段即通過發生innsql完成補數據流程圖。通過sql的算子實現。整個過程主要分為 scan,sort, insert三個階段。在以前版本的行為中,無論具體執行到了哪一個階段,都會返回這三個階段處理的行數。如下所示


// 不使用column group
+----------------------------------------------------------------------------------------------------------------------------+
|                                                                                            MESSAGE                         |
+----------------------------------------------------------------------------------------------------------------------------+
| TENANT_ID: %d, TASK_ID: %d, STATUS: REPLICA BUILD, PARALLELISM: %ld, ROW_SCANNED: %ld, ROW_SORTED: %ld, ROW_INSERTED: %ld  |
+----------------------------------------------------------------------------------------------------------------------------+// 使用 column group
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                            MESSAGE                                                                                      |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TENANT_ID: %d, TASK_ID: %d,  STATUS: REPLICA BUILD, PARALLELISM: %ld, ROW_SCANNED: %ld, ROW_SORTED: %ld, ROW_INSERTED_INTO_TMP_FILE: %ld, ROW_INSERTED: %ld out of %ld column group rows|
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

狀態定義

在新的方案中,我們統計了更加詳細的信息,但是一次展示過于復雜。因此分階段展示信息。考慮到多線程場景,不同線程執行速度可能不一致,因此考慮展示最慢線程所處階段的信息。階段定義如下。同時,無論處于哪個階段,還是會輸出總掃描行數,總排序行數,總插入行數這些整體信息。

enum class RedefinitionState
{BEFORESCAN = 0,SCAN,SORT-PHASE1,SORT-PHASE2,INSERT
};

排序階段分為 內存排序和外部排序,兩個需要分別展示,但是為了方便用戶理解,不暴露實現細節,使用 SORT-PHASE1 和 SORT-PHASE2 分別代表兩個階段。

BEFORESCAN

掃描開始前的階段,可能位于采樣等環節。

"TENANT_ID: %d, TASK_ID:%d STATUS: REPLICA BUILD, BEFORE-SCAN"
SCAN

掃描階段。因為還無法獲取總行數,所以掃描進度和預計用時無法計算,只能輸出已經掃描的總行數。 同時還會輸出掃描的并行度和 掃描已經花費的時間,另外還會輸出所有線程中掃描最多和最少的行數

TENANT_ID: %d, TASK_ID:%d STATUS: REPLICA BUILD, SCANNING, PARALLELISM: %ld,
ROW_ROUNT_INFO:{ ROW_SCANNED: %ld, ROW_SORTED: %ld, ROW_INSERTED: %ld },
SCAN_INFO:{ SCAN_TIME_ELAPSED: %.3fs, MAX_THREAD_ROW_SCANNED: %ld, MIN_THREAD_ROW_SCANNED: %ld }

示例

TENANT_ID: 1004, TASK_ID: 1000817, STATUS: REPLICA BUILD, SCANNING, PARALLELISM: 2,
ROW_COUNT_INFO:{ ROW_SCANNED: 30798887, ROW_SORTED: 0, ROW_INSERTED: 0 },
SCAN_INFO:{ SCAN_TIME_ELAPSED: 86.529s, MAX_THREAD_ROW_SCANNED: 15428902, MIN_THREAD_ROW_SCANNED: 15369985 }第一行是整個ddl_task的整體信息,執行的租戶id為1004,task_id為 1000817,處于掃描階段,掃描并行度為2第二行是掃描行數,總排序行數,總插入行數信息。第三行是為掃描階段具體信息,當前掃描已花費時間為 86.529s ,最多的線程掃了 15428902 行, 最少的線程掃了 15369985 行
SORT-PHASE1

內存排序階段。從此階段開始,不同線程之間進度獨立。輸出的階段和進度按照最慢統計。 為了不產生誤導PARALLELISM仍然展示所有的工作線程數(inmem_sort+merge_sort+insert),另外單獨輸出位于該階段的線程數。

輸出格式為

TENANT_ID: 1, TASK_ID: 3051020, STATUS: REPLICA BUILD, SORT_PHASE1, PARALLELISM: %ld, SORT_PHASE1_THREAD_NUM: %ld,
ROW_COUNT_INFO:{ ROW_SCANNED: %ld, ROW_SORTED: %ld, ROW_INSERTED: %ld },
SORT_PHASE1_PROGRESS_INFO:{ SORT_PHASE1_TIME_ELAPSED: %.3fs, SORT_PHASE1_PROGRESS: %.2f%%, SORT_PHASE1_TIME_REMAINING: %.3fs },
SLOWEST_THREAD_INFO:{ THREAD_ID: %ld, SORTED_ROW_COUNT: %ld }

示例

TENANT_ID: 1004, TASK_ID: 1000817, STATUS: REPLICA BUILD, SORT_PHASE1, PARALLELISM: 2, SORT_PHASE1_THREAD_NUM: 2,
ROW_COUNT_INFO:{ ROW_SCANNED: 32000000, ROW_SORTED: 30917952, ROW_INSERTED: 0 },
SORT_PHASE1_PROGRESS_INFO:{ SORT_PHASE1_TIME_ELAPSED: 137.501s, SORT_PHASE1_PROGRESS: 96.56%, SORT_PHASE1_TIME_REMAINING: 4.892s },
SLOWEST_THREAD_INFO:{ THREAD_ID: 2807314, SORTED_ROW_COUNT: 15458976 }第一行是整個ddl_task的整體信息,執行的租戶id為1004,task_id為 1000817, 
當前階段為REPLICA BUILD的INMEM_SORT階段。當前并行度為2第二行總掃描行數,總排序行數,總插入行數信息的整體信息,第三行為階段的時間和進度信息,當前階段已進行137.501s, 當前階段進度為96.56%,預計還需要4.892s完成。第四行是最慢線程信息, 最慢線程的線程id為 2807314, 最慢線程處理了 15458976 行,
SORT-PHASE2

外部排序階段,前面和內存排序一樣, 但是因為涉及到落盤操作,會額外輸出 落盤io量和臨時文件壓縮類型等信息

TENANT_ID: 1004, TASK_ID: 1000817, STATUS: REPLICA BUILD, SORT_PHASE2, PARALLELISM: %ld, SORT_PHASE2_THREAD_NUM: %ld,
ROW_COUNT_INFO:{ ROW_SCANNED: %ld, ROW_SORTED: %ld, ROW_INSERTED: %ld },
SORT_PHASE2_PROGRESS_INFO:{ SORT_PHASE2_TIME_ELAPSED: %.3fs, SORT_PHASE2_PROGRESS: %.2f%%, SORT_PHASE2_TIME_REMAINING: %.3fs },
SLOWEST_THREAD_INFO:{ THREAD_ID: %ld, SORTRD_ROW_COUNT: %ld },
TEMP_FILE_INFO:{ DUMP_SIZE: %ld, COMPRESS_TYPE: %s }

示例

TENANT_ID: 1004, TASK_ID: 1000817, STATUS: REPLICA BUILD, SORT_PHASE2, PARALLELISM: 2, SORT_PHASE2_THREAD_NUM: 1,
ROW_COUNT_INFO:{ ROW_SCANNED: 32000000, ROW_SORTED: 121040340, ROW_INSERTED: 44300 },
SORT_PHASE2_PROGRESS_INFO:{ SORT_PHASE2_TIME_ELAPSED: 35.277s, SORT_PHASE2_PROGRESS: 85.49%, SORT_PHASE2_TIME_REMAINING: 5.986s },
SLOWEST_THREAD_INFO:{ THREAD_ID: 2807315, SORTRD_ROW_COUNT: 41013268 },
TEMP_FILE_INFO:{ DUMP_SIZE: 366975583, COMPRESS_TYPE: zstd_1.3.8 }第一行是整個ddl_task的整體信息,執行的租戶id為1004 ,task_id為 1000817, 
當前階段為REPLICA BUILD的SORT-PHASE2階段。當前并行度為2,但是只有一個線程處于排序第二階段,說明其完成排序進入插入階段。第二行是總掃描行數,總排序行數,總插入行數信息。第三行是當前階段時間和進度信息。當前階段已進行35.277s,當前階段進度為85.49%,預計剩余5.986s完成。第四行是最慢線程信息,最慢線程的線程id為 2807315, 處理了 41013268行第五行是臨時文件存儲有關信息,當前總落盤量為 366975583, 臨時文件采用的壓縮算法為 zstd_1.3.8 
insert

插入階段,對于column group > 1的表,與原版本保持一致。對于column group為1的表,新行為和sort相似

TENANT_ID: 1004, TASK_ID: 1000817, STATUS: REPLICA BUILD, INSERT, PARALLELISM: %ld, INSERT_THREAD: %ld,
ROW_COUNT_INFO:{ ROW_SCANNED: %ld, ROW_SORTED: %ld, ROW_INSERTED: %ld },
INSERT_PROGRESS_INFO:{ INSERT_TIME_ELAPSED: %.3fs, INSERT_PROGRESS: %.2f%%, INSERT_TIME_REMAINING: %.3fs },
SLOWEST_THREAD_INFO:{ THREAD_ID: %ld, INSERTED_ROW_COUNT: %ld }

示例

TENANT_ID: 1004, TASK_ID: 1000817, STATUS: REPLICA BUILD, INSERT, PARALLELISM: 2, INSERT_THREAD: 2,
ROW_COUNT_INFO:{ ROW_SCANNED: 32000000, ROW_SORTED: 128000000, ROW_INSERTED: 28806480 },
INSERT_PROGRESS_INFO:{ INSERT_TIME_ELAPSED: 121.941s, INSERT_PROGRESS: 86.61%, INSERT_TIME_REMAINING: 18.845s },
SLOWEST_THREAD_INFO:{ THREAD_ID: 2807315, INSERTED_ROW_COUNT: 13850544 }第一行是整體信息, 租戶ID 1004, task_id 1000817,當前階段為REPLICA BUILD的insert階段。當前并行度為2第二行是總掃描行數,總排序行數,總插入行數信息。第三行是當前階段時間和進度信息。當前階段已進行121.941s,插入進度為57.87%,預計 還有16.725s能完成插入階段。第四行是最慢線程信息。最慢線程的線程id為2236847, 處理了3188860行
局部索引的特殊處理

局部索引是存在優化,可能會串行分批發送inner_sql。在這種情況下,為了不產生混淆。針對局部索引。會在輸出tenant_id后task_id后添加build local index batch num: %ld的信息。

//示例
TENANT_ID: 1, TASK_ID: 3051020, build local index batch num: 2, STATUS: REPLICA BUILD, SORT_PHASE2, PARALLELISM: %ld, SORT_PHASE2_THREAD_NUM: %ld,
ROW_COUNT_INFO:{ROW_SCANNED: %ld, ROW_SORTED: %ld, ROW_INSERTED: %ld }, 
SORT_PHASE2_PROGRESS_INFO:{ SORT_PHASE2_TIME_ELAPSED: %.3fs, SORT_PHASE2_PROGRESS: %.2f%%, SORT_PHASE2_TIME_REMAINING: %.3fs }, 
SLOWEST_THREAD_INFO:{ THREAD_ID: %ld, SORTRD_ROW_COUNT: %ld }, 
TEMP_FILE_INFO:{ DUMP_SIZE: %ld, COMPRESS_TYPE: %s }build local index batch num: 2 表示目前是局部索引的第二批執行。其他語義不變。

新增 __all_virtual_ddl_diagnose_info 虛擬表

各字段說明

FieldTypeNullKeyDefaultExtra
tenant_idbigint(20)NOPK租戶ID
ddl_task_idbigint(20)NOPK任務ID
object_table_idbigint(20)NOPK目標表ID
op_typevarchar(64)NOPKDDL操作類型
create_timetimestampNOPKDDL開始時間
finish_timetimestampNULLDDL結束時間
diagnose_infovarchar(1024)NULLDDL執行診斷信息

目前虛擬表會輸出正在進行的DDL和最近完成的100條DDL的信息。因為只能對走sql 路徑的DDL進行診斷。類型如下

DDL_CREATE_INDEX
DDL_CREATE_PARTITIONED_LOCAL_INDEX 
DDL_MODIFY_COLUMN
DDL_ADD_PRIMARY_KEY
DDL_ALTER_PRIMARY_KEY
DDL_ALTER_PARTITION_BY
DDL_TABLE_REDEFINITION

診斷信息輸出

還未開始掃描的DDL

對于正在進行的DDL, 在掃描開始前無統計信息,此時message為空。

+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------+
| tenant_id | ddl_task_id | object_table_id | opname                             | create_time                | finish_time                | diagnose_info |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------+
|      1004 |     2079489 |          500005 | DDL_CREATE_PARTITIONED_LOCAL_INDEX | 2024-12-30 19:21:13.619570 | 2024-12-30 19:21:14.297205 |               |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------+
還未開始排序的DDL

在掃描階段無法感知異常信息。在這個階段因此僅輸出 “Scanning” 信息。

+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------+
| tenant_id | ddl_task_id | object_table_id | opname                             | create_time                | finish_time                | diagnose_info |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------+
|      1004 |     2079489 |          500005 | DDL_CREATE_PARTITIONED_LOCAL_INDEX | 2024-12-30 19:21:13.619570 | 2024-12-30 19:21:16.706037 | Scanning      |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------+
空算子DDL

沒有找到對應的sql_monitor_node或者算子總行數為0的情況。此時不進行診斷。不會出現在虛擬表中。

開始排序的DDL

THREAD_INFO: { parallel_num : %ld, row_max: %ld, row_max_thread_id: %ld, row_min: %ld, row_min_thread_id: %ld }

展示并行度,還有行數最多和最少的線程信息。

+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------------------------------------------+
| tenant_id | ddl_task_id | object_table_id | opname                             | create_time                | finish_time                | diagnose_info                                                                                                                 |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------------------------------------------+
|      1004 |     2079489 |          500005 | DDL_CREATE_PARTITIONED_LOCAL_INDEX | 2024-12-30 15:35:37.995584 | 2024-12-30 19:21:16.706037 | THREAD_INFO: { parallel_num : 5, row_max: 6512288, row_max_thread_id: 3025919, row_min: 6243328, row_min_thread_id: 3025940 } |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------------------------------------------+
執行完成的DDL

對于已經執行成功的DDL, 會輸出以下信息

THREAD_INFO: { parallel_num : %ld, row_max: %ld, row_max_thread_id: %ld, row_min: %ld, row_min_thread_id: %ld slowest_thread_id: %ld }, 
TIME_INFO: { scan_time: %.3fs, sort_time: %.3fs, insert_time: %.3fs }
除了 并行度, 還有行數最多和最少的線程信息,另外還有執行最慢的線程id。
另外,還統計了各個階段花費的時間信息。
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant_id | ddl_task_id | object_table_id | opname                             | create_time                | finish_time                | diagnose_info                                                                                                                                                                                                                         |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|      1004 |     2069349 |          500907 | DDL_CREATE_PARTITIONED_LOCAL_INDEX | 2024-12-30 19:16:28.035185 | 2024-12-30 19:19:39.831287 | THREAD_INFO: { parallel_num : 5, row_max: 6512288, row_max_thread_id: 3025937, row_min: 6243328, row_min_thread_id: 3025940 slowest_thread_id: 3025936 }, TIME_INFO: { scan_time: 50.350s, sort_time: 70.715s, insert_time: 61.291s } |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
發生過重試的DDL

發生重試的DDL ,會在最前面輸出嘗試次數信息

正在進行的DDL輸出 當前次數,已經完成的DDL輸出最高次數

+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant_id | ddl_task_id | object_table_id | opname                             | create_time                | finish_time                | diagnose_info                                                                                                                                                                                                                                       |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|      1004 |     2069349 |          500907 | DDL_CREATE_PARTITIONED_LOCAL_INDEX | 2024-12-30 19:16:28.035185 | 2024-12-30 19:19:39.831287 | try count: 2, THREAD_INFO: { parallel_num : 5, row_max: 6512288, row_max_thread_id: 3025937, row_min: 6243328, row_min_thread_id: 3025940 slowest_thread_id: 3025936 }, TIME_INFO: { scan_time: 50.350s, sort_time: 70.715s, insert_time: 61.291s } |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

異常診斷信息輸出

分析診斷結果,如果存在異常場景,會輸出診斷提醒。

數據傾斜:

當行數最多的線程和最低的線程相差大于 100%時,會認為存在數據傾斜,會在上面診斷信息的基礎上添加以下信息。

The data skew is significant, with a low sampling rate or uneven sampling.
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant_id | ddl_task_id | object_table_id | opname                             | create_time                | finish_time                | diagnose_info                                                                                                                                                                                                                                                                                                                       |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|      1004 |     4000296 |          501821 | DDL_CREATE_PARTITIONED_LOCAL_INDEX | 2024-12-31 09:47:39.521994 | 2024-12-31 09:50:25.560664 | THREAD_INFO: { parallel_num : 5, row_max: 6512288, row_max_thread_id: 3913304, row_min: 6243328, row_min_thread_id: 3913307 slowest_thread_id: 3913304 }, TIME_INFO: { scan_time: 26.608s, sort_time: 68.728s, insert_time: 60.114s }, DIAGNOSE_CASE: { The data skew is significant, with a low sampling rate or uneven sampling. }|
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
并行度低于預期

當實際處理數據的的算子數低于并行度時,會輸出以下信息

The number of threads with data is less than the dop. real_parallelism: %ld
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant_id | ddl_task_id | object_table_id | opname                             | create_time                | finish_time                | diagnose_info                                                                                                                                                                                                                                                                                                        |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|      1004 |     3046793 |          501563 | DDL_CREATE_INDEX                   | 2024-12-30 20:59:49.831452 | 2024-12-30 20:59:50.755917 | THREAD_INFO: { parallel_num : 5, row_max: 1, row_max_thread_id: 3150398, row_min: 1, row_min_thread_id: 3150398 slowest_thread_id: 3150399 }, TIME_INFO: { scan_time: 0.030s, sort_time: 0.002s, insert_time: 0.051s }, DIAGNOSE_CASE: { The number of threads with data is less than the dop. real_parallelism: 4. }|
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

局部索引的特殊處理

對于局部索引分批執行的場景。不輸出各階段的執行時間,同時也不進行數據傾斜度的計算。只診斷并行度低于預期的場景。同時會輸出批次信息。正在進行的DDL輸出當前處理的批次, 完成的DDL輸出總批次。

+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant_id | ddl_task_id | object_table_id | opname                             | create_time                | finish_time                | diagnose_info                                                                                                                                                 |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
|      1004 |     2079489 |          500005 | DDL_CREATE_PARTITIONED_LOCAL_INDEX | 2024-12-30 15:35:37.995584 | 2024-12-30 19:21:16.706037 | build local index batch num: 3, THREAD_INFO: { parallel_num : 5, row_max: 6512288, row_max_thread_id: 3025919, row_min: 6243328, row_min_thread_id: 3025940 } |
+-----------+-------------+-----------------+------------------------------------+----------------------------+----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93014.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93014.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93014.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

幸福網咖訂座點餐小程序的設計與實現

文章目錄前言詳細視頻演示具體實現截圖后端框架SpringBoot微信小程序持久層框架MyBaits成功系統案例:參考代碼數據庫源碼獲取前言 博主介紹:CSDN特邀作者、985高校計算機專業畢業、現任某互聯網大廠高級全棧開發工程師、Gitee/掘金/華為云/阿里云/GitHub等平臺持續…

C語言————練習題冊(答案版)

目錄 每日更新5-10題,感興趣可以訂閱 一.理解函數、操作符、占位符 1.1 歡迎來到C語言的世界 1.2 輸入和輸出 1.3 浮點數的打印 1.4 字符串的打印 1.14 I am iron man 1.5 求和運算 1.6 計算比例 1.7 求商求余 1.8 不同數位上的數字 1.8.1 求個位數 1.8…

haproxy配置詳解

1、haproxy簡介 HAProxy是法國開發者 威利塔羅(Willy Tarreau) 在2000年使用C語言開發的一個開源軟件 是一款具備高并發(萬級以上)、高性能的TCP和HTTP負載均衡器 支持基于cookie的持久性,自動故障切換,支持正則表達式及web狀態統計 企業版網站&#xff…

計網-TCP可靠傳輸

TCP(傳輸控制協議)的可靠傳輸是通過一系列機制保證數據準確、有序、不丟失地到達接收方。以下是TCP可靠傳輸的詳細過程及核心機制:1. 數據分塊與序列號(Seq)分塊:應用層數據被分割成適合傳輸的TCP報文段&am…

數智管理學(三十九)

第三章 數智化對管理理論的沖擊第三節 系統理論與生態化管理的強化系統理論作為理解企業運作與環境互動的重要框架,一直強調企業是一個由多個相互關聯子系統構成的整體,其核心要素包括整體性、開放性、動態性和反饋機制。在傳統管理視角下,這…

哈希表(c語言)

文章目錄哈希表哈希表知識點哈希表概念負載因子哈希表的優缺點哈希沖突哈希函數常見哈希函數處理哈希沖突開放定址法線性探測二次探測鏈地址法哈希表的實現哈希表的核心:HashMap核心函數:從創建到銷毀創建哈希表:hashmap_create()銷毀哈希表:hashmap_des…

【Canvas與旗幟】條紋版大明三辰旗

【成圖】【代碼】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>十三條紋版大明三辰旗 Draft1</title><style type"text/…

【Java】空指針(NullPointerException)異常深度攻堅:從底層原理到架構級防御,老司機的實戰經驗

寫Java代碼這些年&#xff0c;空指針異常&#xff08;NullPointerException&#xff09;就像甩不掉的影子。線上排查問題時&#xff0c;十次有八次最后定位到的都是某個對象沒處理好null值。但多數人解決問題只停留在加個if (obj ! null)的層面&#xff0c;沒從根本上想過為什么…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 主頁-評論用戶時間占比環形餅狀圖實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解主頁-評論用戶時間占比環形餅狀圖實現 視頻…

Redis面試精講 Day 5:Redis內存管理與過期策略

【Redis面試精講 Day 5】Redis內存管理與過期策略 開篇 歡迎來到"Redis面試精講"系列的第5天&#xff01;今天我們將深入探討Redis內存管理與過期策略&#xff0c;這是面試中經常被問及的核心知識點。對于后端工程師而言&#xff0c;理解Redis如何高效管理內存、處…

ICMPv6報文類型詳解表

一、錯誤報文類型&#xff08;Type 1-127&#xff09;Type值名稱Code范圍觸發條件示例典型用途1Destination Unreachable0-60: 無路由到目標1: 通信被管理員禁止2: 地址不可達3: 端口不可達4: 分片需要但DF標志設置5: 源路由失敗6: 目的地址不可達網絡故障診斷2Packet Too Big0…

配置nodejs

第一步確認 node.exe 和 npm 存在 例如安裝目錄D:\nodejs檢查是否存在以下文件&#xff1a; node.exenpm.cmdnpx.cmd 第二步&#xff1a;添加環境變量 PATH 圖形化操作步驟&#xff08;Windows&#xff09;&#xff1a; 右鍵「此電腦」→「屬性」點擊左側 「高級系統設置」彈出…

MySQL的命令行客戶端

MySQL中的一些程序&#xff1a;MySQL在安裝完成的時候&#xff0c;一般都會包含如下程序&#xff1a;在Linux系統下&#xff0c;通過/usr/bin目錄下&#xff0c;可以通過命令查看&#xff1a;以下是常用的MySQL程序&#xff1a;程序名作用mysqldMySQL的守護進程即MySQL服務器&a…

C# 值類型與引用類型的儲存方式_堆棧_

目錄 值類型 引用類型 修改stu3的值 stu也被修改了 為什么? &#xff08;對象之間&#xff09; 值類型中&#xff0c;值全在棧中單獨存儲&#xff0c;變量之間不會影響 結構體中&#xff0c;結構體全在棧中&#xff0c;結構體與結構體之間也不會相互影響 靜態資源區 值類…

解鎖永久會員的白噪音軟件:睡眠助手

如今的年輕人壓力普遍較大&#xff0c;學會解壓至關重要。這期就為大家推薦一款優秀的白噪音軟件&#xff0c;在壓力大時聽聽&#xff0c;能起到不錯的解壓效果。 睡眠助手 文末獲取 這款軟件的特別版本十分出色&#xff0c;知曉的人不多。它已解鎖永久會員&#xff0c;無需登…

uniapp使用css實現進度條帶動畫過渡效果

一、效果 二、實現原理 1.uni.createAnimation 動畫函數 2.初始化uni.createAnimation方法 3.監聽值的變化調用動畫執行方法 三、代碼 1.實現方式比較簡單&#xff0c;目前是vue3的寫法&#xff0c;vue2只需要稍微改動即可 <template><view class"layout_progre…

高級分布式系統調試:調試的科學與 USE 方法實戰

高級分布式系統調試:調試的科學與 USE 方法實戰 前言:從“救火”到“探案” 當一個復雜的分布式系統出現“灰色故障”——例如“服務有時會變慢”、“偶爾出現超時錯誤”——我們該從何處著手?隨機地查看 Grafana 儀表盤,或者漫無目的地 tail -f 日志,往往效率低下,甚至…

棧算法之【有效括號】

目錄 LeetCode-20題 LeetCode-20題 給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 每…

大模型——Data Agent:超越 BI 與 AI 的邊界

Data Agent:超越 BI 與 AI 的邊界 1. 數據工具的演進路徑 在數據分析領域,技術工具經歷了多個階段的演進。這些演進不僅反映了技術的進步,也體現了用戶需求和使用場景的變化。 Excel 時代:告別手工作業,陷入“表格泥潭“,早期數據分析依賴 Excel,實現基礎數據記錄、計…

數據空間技術在智慧水庫管理平臺中的賦能

數據空間技術在智慧水庫管理平臺中的賦能&#xff1a;設備到應用的數據傳輸優化 數據空間技術為智慧水庫管理平臺提供了革命性的數據傳輸、處理和安全保障能力。以下是數據空間技術在設備到應用數據傳輸過程中的全面賦能方案&#xff1a; 數據空間賦能架構設計 #mermaid-svg-R2…