達夢執行緒學習

2021-09-29 06:12:37 字數 2204 閱讀 3139

達夢執行緒學習,全部參照官方文件。

dm伺服器使用「對稱伺服器架構」的單程序、多執行緒結構。執行緒即作業系統執行緒,伺服器在執行過程中由各種記憶體資料結構和一系列的執行緒組成,執行緒分為多種型別,不同型別的執行緒完成不同的任務,通過一定的同步機制對資料結構進行併發訪問和處理,以完成客戶提交的各種任務。dm資料庫伺服器是共享的伺服器,允許多個使用者連線到同乙個伺服器上,伺服器程序稱為共享伺服器程序。

dm程序中主要包括:監聽執行緒、io執行緒、工作執行緒、排程執行緒、日誌執行緒等。

監聽執行緒的主要任務是在伺服器端口上進行迴圈監聽,一旦有來自客戶的連線請求,監聽執行緒被喚醒並生成乙個會話申請任務,加入工作執行緒的任務佇列,等待工作執行緒進行處理。監聽執行緒在系統啟動完成後才啟動,並在系統關閉時首先被關閉。為保證在處理大量客戶鏈結時具有較短的響應時間,監聽執行緒比普通執行緒優先順序更高。(會話處於create狀態和這個有沒有關係?是不是加入了任務佇列但還沒有被工作執行緒處理的?但是有些create狀態的會話能看到sql_text資訊啊)

工作執行緒是dm伺服器的核心執行緒,它從任務佇列中取出任務,並根據任務的型別進行相應的處理,負責所有實際的資料相關操作。dm8的初始工作執行緒個數由ini引數指定(worker_threads?)隨著會話連線的增加,工作執行緒也會同步增加,以保持每個會話都有專門的工作執行緒處理請求。為了保證使用者所有的請求及時響應,乙個會話上的任務全部由同乙個工作執行緒完成,這樣減少了執行緒切換的代價,提高了系統效率。當會話連線超過預設的閾值時,工作執行緒數目不再增加,轉而由會話輪詢執行緒接收所有使用者的請求,加入任務佇列,等待工作執行緒一旦空閒,從任務佇列一次摘取請求任務處理。(上面說的初始工作執行緒數和預設閾值到底是通過哪個引數控制的?worker_threads和max_sessions?但是查詢v$threads時,看到dm_wrkgrp_thd一直都只有worker_threads設定的大小,不管是系統剛啟動無連線還是鏈結數已經超過了worker_threads。)

在資料庫活動中,io操作歷來都是最為耗時的操作之一,當事務需要的資料頁不在緩衝區中時,若在工作執行緒中直接對那些資料頁進行讀寫,將會使系統效能變得非常糟糕,而把io操作從工作執行緒中分離出來則是明智的做法,io執行緒的職責就是處理這些io操作。io執行緒在啟動後,通常都處於睡眠狀態,當系統需要進行io時,只需要發出乙個io請求,此時io執行緒被喚醒以處理該請求,在完成該io操作後繼續進入睡眠狀態。

io執行緒的個數可通過ini引數io_thr_groups來配置。io執行緒處理io的策略根據作業系統平台的不同會有很大差異,一般情況下,io執行緒使用非同步的io將資料頁寫入磁碟,此時系統將所有的io請求直接遞交給作業系統,作業系統在完成這些請求後才通知io執行緒,這種非同步io的方式使得io執行緒需要直接處理的任務很簡單,即完成io後的一些收尾處理並發出io完成通知,若作業系統不支援非同步io,此時io執行緒就需要完成實際的io操作。

排程執行緒用於接管接管系統中所有需要定時排程的任務,排程執行緒每秒鐘輪詢一次。

任何資料庫的修改,都會產生重做redo日誌,為了保證資料故障恢復的一致性,redo日誌的刷盤必須在資料頁刷盤之前進行。事務執行時,會把生成的redo日誌保留在日誌緩衝區中,當事務提交或執行檢查點時,會通知flush執行緒進行日誌刷盤。若系統配置了實時歸檔,在flush執行緒日誌刷盤前,會直接將日誌通過網路傳送到實時備庫;若配置了本地歸檔,則生成歸檔任務,通過日誌歸檔執行緒完成;

日誌歸檔執行緒包含非同步歸檔執行緒,負責遠端非同步歸檔任務,若配置了非實時歸檔,由日誌flush執行緒產生的任務會分別加入日誌歸檔執行緒,日誌歸檔執行緒負責從任務佇列中取出任務,按照歸檔型別做相應的處理。

在資料庫的各種活動中,使用者常常需要資料庫完成在某個時間點開始進行某種操作,如備份。定時器執行緒就是為這種需求而設計的。

邏輯日誌歸檔用於dm8的資料複製中,包含本地邏輯日誌歸檔執行緒和遠端邏輯邏輯日誌歸檔執行緒。

mal系統是dm內部告訴通訊系統,基於tcp/ip協議,伺服器的很多重要功能都是通過mal系統實現通訊的,如:資料守護、資料複製、mpp、遠端日誌歸檔等。mal系統內部包含一系列執行緒,有mal監聽執行緒、mal傳送工作執行緒、mal接收工作執行緒等。

dm資料庫中還包含一些其它執行緒,如:回滾段清理purge執行緒、審計寫檔案執行緒、重演捕獲寫檔案執行緒等。

可以通過以下動態效能檢視檢視系統中線程相關資訊:v$latches(記錄當前正在等待的執行緒資訊)、v$threads(記錄當前系統中活動執行緒的資訊)、v$wthrd_history(記錄自系統啟動以來,所有活動過執行緒的相關歷史資訊)、v$process(記錄伺服器程序資訊)。

不是很懂工作執行緒,它到底做什麼工作,感覺很多任務作都有專門的執行緒做了呀。

學習達夢DCA筆記

安裝資料庫 建立資料庫 圖形建庫 開啟dbca工具 dm dmdbms tool dbca.sh注意 用dm使用者,不要用root使用者 2.建庫 資料庫名 選中兩個示例庫,其他預設。3.用root使用者執行命令後完成 dm dmdbms script root dm service install...

達夢資料查詢編碼 達夢常用sql

1 檢視儲存過程建立指令碼 select text from dba source where owner and type proc 注 owner是指使用者名稱,type可以檢視型別 比如檢視 建表等。2 檢視表的儲存大小 select segment name,bytes 1024 1024 ...

達夢索引管理

達夢索引管理,全部參照官方文件。索引是與表相關的可選的結構 聚簇索引除外 它能使對應於表的sql語句執行的更快。dm提供了幾種型別的索引。聚集索引 每乙個普通表有且僅有乙個聚集索引 唯一索引 索引資料根據索引鍵唯一 函式索引 包含函式 表示式的預先計算的值 位圖索引 對低基數的列建立位圖索引 位圖連...