探索系列——神人steve adams之著oracle8i interal service(二十一)
the uga
包含與某個特定會話相關的資訊,比如:
開啟cursors持續及執行時的區域
包的狀態資訊,特別是包的變數
java會話狀態
開啟的角色
開啟的任何trace事件
生效或執行中的nls引數
開啟的任何資料庫連結
基於可信任的oracle的會話的強制訪問控制mac標籤label
和pga一樣,uga也包含兩個組成區域,固定uga和可變uga,或者uga heap.固定uga包含70個原子變數,細小的資料結構,指向uga heap的指標.
uga heap的大塊對於x$ksmup它的會話是可見的,它與x$ksmsp結構相同.uga heap包含一些固定表的固定記憶體,這與某些初始化引數有關,比如
open_cursors,open_links,max_enabled_roles.除非之外,uga heap大多數或主要地largely專門用於私有sql和pl/sql areas.
記憶體中uga的位置與會話的配置有關.在專有伺服器連線中,一個會話與一個程式是固定的1:1關係,uga就位於pga之中.固定uga就是pga其中一個大塊,
uga heap是pga的一個subheap.在mts和xa連結中,固定uga是共享池中的一個大塊,uga heap是大池的一個subheap,or failing that,the shared pool(不會譯).
在這種配置情況下(指mts or xa),uga位於sga中,這樣就強迫每個使用者的uga消耗一定量the amount的sga記憶體.多麼精明的方法.可以用private_sga
profile resource limit來實現它.
the cga
和其它的全域性區域不同,它是短暫的transient.僅僅只會存在於一個呼叫call期間.大多數對於例項的低階呼叫會用到它,這些呼叫包括:
解析一個sql語句
執行一個sql語句
提取一個select語句的輸出結果
每個遞迴呼叫需要一個獨立的cga.在語句解析期間也可能需要對於查詢資料字典資訊的遞迴呼叫,為了檢查一個語句的語義,以及在語句最佳化期間
評估可選的執行計劃.在執行pl/sql塊時(為了處理每個sql語句子模組),也會用到遞迴呼叫,還有在dml語句執行過程中為了處理或進行或執行觸發器的執行.
cga是pga一個subheap,而不管uga是否位於pga或者sga中.這個事實可以得一個重要的結論corollary,這些會話勢必對應任何呼叫期間的一個程式.
特別是開發mts的應用時,理解這個很重要.如果一些呼叫會延伸protracted,必須增加程式數目,用來減輕compensate for that.
當然,呼叫calls不會在它們的cga中專用或排它使用資料結構.事實上與呼叫相關的一些重要的資料結構基本上typically在uga中.比如,私有sql和
pl/sql areas有排序區域必須位於uga,因為它們必須在多個呼叫期間持續存在.cga僅包含呼叫最後或結束時可以freed的資料結構.比如,cga包含直接i/o buffers,
遞迴呼叫的資訊,表示式評估的stack空間,以及其它的臨時資料結構.
java call memory也會在cga中進行分配.這塊記憶體比其它任何的oracle記憶體區域管理更為集中.它被分割為三個空間,
the stack space,the new space,the old space.在the new space和old space中不再被引用的大塊就是收集的垃圾garbage collected,在根據它們的持有或佔有tenure
的長度和大小隨之變化的頻率,與之對應的呼叫執行期間.once一旦它們survived存在活一些new space的垃圾收集重複,new space chunks被複製到the old space.這是oracle
記憶體管理中唯一的垃圾收集方法.所有其它的oracle記憶體管理依賴於顯式或明確的dead chunks的freeings.
process memory allocation
與sga不同,它在例項啟動就固定了大小,當然pga可以增長.使用malloc()或sbrk()來擴充套件程式的heap data segment可以達到增長process memory的作用.新os的虛擬
記憶體然後以一個新extent被新增到pga heap上.這些extents通常大小僅僅是幾k,如有必要oracle可能分配數以千計的extents.
但是,一個程式的heap data segment增長是有限制的.大多情況下,這個預設限制是由maxdsiz來控制.在一些情況下,這個預設值也可以根據不同的程式來改變.
這也是對於所有程式的總計虛擬記憶體大小會有一個全域性的限制.這個限制與可用的swap space大小有關.如果超過任何一個限制,oracle相關程式會報ora-4030.
這個錯誤很少發生,因為每個程式的資源限制,通常表明swap space不足.為了診斷這個問題,可以用os工具檢視swap space的使用情況.在一些os你也可以用另一個小工具maxmem
來檢查每一個程式可以被分配最大的heap data segment大小值是多少,以及which limit is being hit first.
如果問題是swap space不足,如果paging 活動適度或者嚴重的話,此時你應嘗試減少全域性的虛擬記憶體使用,可以透過減少程式的數目或者減少每個程式的記憶體使用來達到這個目的.
否則,如果paging活動很輕微或為0時,你應增加swap space大小,最可取的是,如果你的os支援它,你應使用虛擬或pseudo
swap space.
os工具允許全系統範圍內的虛擬記憶體超過space space,大約是未被鎖定的實體記憶體數量.一些sa無理反對使用這種特徵,
他們錯誤認為這樣會導致記憶體paging.其實不是這樣或其實不然.但是,它會極大減少在大記憶體系統上所需要swap space的數量.順便說一句incidentally,swap space應該是實體記憶體的2倍以上,
我認為這個世所知之的公理不一定正確,但是一些系統確實不需要swap space.
process memory deallocation
oracle heaps增長比收縮更為容易或快速readily,但是與主流觀點相反的是,它們可以也能收縮.v$mystat和v$sesstat的會話統計資訊session uga memory和
session pga memory分別顯示uga和pga heaps的當前大小,包括內部空閒空間.與之對應的統計資訊session uga memory max和session pga memory max顯示了會話生命周
期內每個heaps的峰值大小.
某些操作之後,uga和pga heaps才會進行收縮,比如一個disk sort的合併階段,或者顯式呼叫dbms_session.free_unused_user_memory過程free memory.但是,僅僅只有
完全空閒的heap extents會released給父heap或者給process data heap segment.甚至記憶體顯式被freed,一些內部的空閒空間仍會remains.
雖然從技術方面可以這樣作,在大多os下,oracle不會學試減少process data heap segment的大小及release虛擬記憶體給os.因此從os角度來講,一個oracle程式的虛擬記憶體
大小會保持在它的hwm標準上.oracle依賴os來頁出任何不用的虛擬記憶體(如有必要).因此,oracle程式所佔用的虛擬記憶體大小的統計資訊就會誤導人.相反應使用內部的oracle統計資訊,
甚至這些會誇大真實的記憶體需要.
在mts應用才會需要用dbms_session.free_unused_user_memory.應該謹慎使用它,僅僅只會把large package array variables使用的記憶體返回給large pool或共享池.
但是,記憶體首先應在uga heap中freed,這可以透過分配一個空佇列empty array給佇列變數,或者呼叫dbms_session.reset_package來達到目的.
請忽略dbms_session包上面的基於記憶體效果的說明之相關注解,它們僅用於一個用途或作用,曾經僅僅為了同一個目的或作用而重用(can only ever be reused for the same purpose).
經歷了一個large sort之後,有必要free unused user memory.what is intended is that memory所針對這部分記憶體,一旦分配給了一個subheap,通常情況下只在那個that subheap中可用,
直至整個subheap被freed.但是,許多subheaps,比如cga,freed過於快速致使語句至多產生了誤解(such as the cga,are freed so quicky that the statement is,at best misleading)
而且(此外)moreover,在一個sort後正常情況沒必要free unused user memory,not even甚至不是在mts應用中,因為大多數排序記憶體,實際上,自動進行freed.
taking headdumps
oracle支援提取heapdumps資訊,為了便於診斷一個潛在的記憶體問題.在當前程式中使用alter session set event可以提取heapdumps資訊,或者在另一個會話用oradebug event.
heapdumps資訊會寫入程式的dump目錄結構的一個trace file中,它包含x$表的大量對應資訊.
primary heaps的heapdumps的事件語法是immediate trace name heapdump level n.級別(n)是一個bit模式,代表要dump哪個heaps:1對應pga,2對應sga,4對應uga,8對應cga,32對應
large pool.
arbitrary subheaps任意的subheaps的heapdumps的事件語法是immediate trace name heapdump_addr level n,這裡n是heap descriptor描述符的十六進位制地址所對應的十進位制.
ksm x$表的ksmchpar列可以檢視subheap heap descriptor addresss,以及在它們parent heaps的heapdumps旁邊上的ds=string
reference參考
這節包含引數,事件,統計的一些快速指志資訊
parameters引數
引數 描述
_large_pool_min_alloc 大池大塊分配會四捨五入到這個值.預設是16k,不應被改變
_use_ism intimate親密共享記憶體預設被使用.但是,在一些os下實行這個是有問題的,因此有時有必要設定它為false
db_files log_files(oracle8.1之前)control_files 它們影響固定pga的大小.它們的大小不應大於任何必要的配置(they should not be any larger than reasonably necessary)
large_pools_size 滿足大池的一些large chunks of memory的必然需要certain demands.
lock_sga 如果os一直存在paging,應配置它為true,防止sga paging.
log_buffer 雖然它是sga一個獨立區域,但從大小上講它是微不足道的
open_cursors open_links max_enabled_roles 影響固定uga大小.它們的大小不要超過必要的大小
pre_page_sga 設定為true,會導致所有的oracle伺服器程式,在程式啟動時,必要時分page in整個sga.這樣會在實際啟動之後哪個期間馬上產生一個小小或微小marginal的效能提升,但這樣同時會帶來所有程式啟動變慢的風險.
sessions 它會對共享池的固定記憶體chunk的固定表的總計大小產生最大的影響
shared_memory_address hi_shared_memory_address 在一些os上,用它們指定sga應被附加attached在虛擬記憶體地址哪個區哉
shared_pool_reserved_size 從共享池reserved list中選出滿足大於5000bytes的共享池chunk分配大小allocations.這個引數設定reserved lists的大小(以bytes計).reserved list分配的門限值,由_shared_pool_reserved_min_alloc決定,不應被改變.
shared_pool_size 設定用於動態分配的共享池的大約的大小,以bytes表示
sort_area_size 此引數對記憶體使用與效能有很大影響
events事件
事件 描述
4030 這是程式記憶體錯誤事件的輸出out.為了提取發生匹配此精時間發生錯誤的pga,uga,cga,在你的引數檔案設定如下
event="4030 trace name heapdump level 13"
4031 這是共享記憶體錯誤事件的輸出.如果你發現系統一直重複報ora-04031錯誤,可以在引數檔案中設定如下事件以提取精確時間發生這個錯誤的sga heapdump資訊
event="4031 trace name heapdump level 2"
在mts環境中,為了包含一個uga heapdump,要採用level 6
10235 這個事件讓oracle server code不斷檢查記憶體完整性和heap管理資料結構.為了診斷一些可疑的記憶體損壞問題,有時這樣很有必要.但不幸的是,這個事件只適用下例項範圍,不能在單個程式上設定
statistics統計
統計 出處或源頭 描述
free memory v$sgastat sga heap的空閒記憶體.它包含固定記憶體chunk上面空閒列表和備用空閒記憶體的大塊,但不包含unpinned 重建大塊
session uga memory v$sesstat and v$mystat 會話uga heap的當前大小,不含固定uga
session uga memory max v$mystat and v$sesstat uga heap大小的hwm
session pga memory v$mystat and v$sesstat 會話pga heap的當前大小,不含固定pga
session pga memory max v$mystat and v$sesstat pga heap大小的hwm
包含與某個特定會話相關的資訊,比如:
開啟cursors持續及執行時的區域
包的狀態資訊,特別是包的變數
java會話狀態
開啟的角色
開啟的任何trace事件
生效或執行中的nls引數
開啟的任何資料庫連結
基於可信任的oracle的會話的強制訪問控制mac標籤label
和pga一樣,uga也包含兩個組成區域,固定uga和可變uga,或者uga heap.固定uga包含70個原子變數,細小的資料結構,指向uga heap的指標.
uga heap的大塊對於x$ksmup它的會話是可見的,它與x$ksmsp結構相同.uga heap包含一些固定表的固定記憶體,這與某些初始化引數有關,比如
open_cursors,open_links,max_enabled_roles.除非之外,uga heap大多數或主要地largely專門用於私有sql和pl/sql areas.
記憶體中uga的位置與會話的配置有關.在專有伺服器連線中,一個會話與一個程式是固定的1:1關係,uga就位於pga之中.固定uga就是pga其中一個大塊,
uga heap是pga的一個subheap.在mts和xa連結中,固定uga是共享池中的一個大塊,uga heap是大池的一個subheap,or failing that,the shared pool(不會譯).
在這種配置情況下(指mts or xa),uga位於sga中,這樣就強迫每個使用者的uga消耗一定量the amount的sga記憶體.多麼精明的方法.可以用private_sga
profile resource limit來實現它.
the cga
和其它的全域性區域不同,它是短暫的transient.僅僅只會存在於一個呼叫call期間.大多數對於例項的低階呼叫會用到它,這些呼叫包括:
解析一個sql語句
執行一個sql語句
提取一個select語句的輸出結果
每個遞迴呼叫需要一個獨立的cga.在語句解析期間也可能需要對於查詢資料字典資訊的遞迴呼叫,為了檢查一個語句的語義,以及在語句最佳化期間
評估可選的執行計劃.在執行pl/sql塊時(為了處理每個sql語句子模組),也會用到遞迴呼叫,還有在dml語句執行過程中為了處理或進行或執行觸發器的執行.
cga是pga一個subheap,而不管uga是否位於pga或者sga中.這個事實可以得一個重要的結論corollary,這些會話勢必對應任何呼叫期間的一個程式.
特別是開發mts的應用時,理解這個很重要.如果一些呼叫會延伸protracted,必須增加程式數目,用來減輕compensate for that.
當然,呼叫calls不會在它們的cga中專用或排它使用資料結構.事實上與呼叫相關的一些重要的資料結構基本上typically在uga中.比如,私有sql和
pl/sql areas有排序區域必須位於uga,因為它們必須在多個呼叫期間持續存在.cga僅包含呼叫最後或結束時可以freed的資料結構.比如,cga包含直接i/o buffers,
遞迴呼叫的資訊,表示式評估的stack空間,以及其它的臨時資料結構.
java call memory也會在cga中進行分配.這塊記憶體比其它任何的oracle記憶體區域管理更為集中.它被分割為三個空間,
the stack space,the new space,the old space.在the new space和old space中不再被引用的大塊就是收集的垃圾garbage collected,在根據它們的持有或佔有tenure
的長度和大小隨之變化的頻率,與之對應的呼叫執行期間.once一旦它們survived存在活一些new space的垃圾收集重複,new space chunks被複製到the old space.這是oracle
記憶體管理中唯一的垃圾收集方法.所有其它的oracle記憶體管理依賴於顯式或明確的dead chunks的freeings.
process memory allocation
與sga不同,它在例項啟動就固定了大小,當然pga可以增長.使用malloc()或sbrk()來擴充套件程式的heap data segment可以達到增長process memory的作用.新os的虛擬
記憶體然後以一個新extent被新增到pga heap上.這些extents通常大小僅僅是幾k,如有必要oracle可能分配數以千計的extents.
但是,一個程式的heap data segment增長是有限制的.大多情況下,這個預設限制是由maxdsiz來控制.在一些情況下,這個預設值也可以根據不同的程式來改變.
這也是對於所有程式的總計虛擬記憶體大小會有一個全域性的限制.這個限制與可用的swap space大小有關.如果超過任何一個限制,oracle相關程式會報ora-4030.
這個錯誤很少發生,因為每個程式的資源限制,通常表明swap space不足.為了診斷這個問題,可以用os工具檢視swap space的使用情況.在一些os你也可以用另一個小工具maxmem
來檢查每一個程式可以被分配最大的heap data segment大小值是多少,以及which limit is being hit first.
如果問題是swap space不足,如果paging 活動適度或者嚴重的話,此時你應嘗試減少全域性的虛擬記憶體使用,可以透過減少程式的數目或者減少每個程式的記憶體使用來達到這個目的.
否則,如果paging活動很輕微或為0時,你應增加swap space大小,最可取的是,如果你的os支援它,你應使用虛擬或pseudo
swap space.
os工具允許全系統範圍內的虛擬記憶體超過space space,大約是未被鎖定的實體記憶體數量.一些sa無理反對使用這種特徵,
他們錯誤認為這樣會導致記憶體paging.其實不是這樣或其實不然.但是,它會極大減少在大記憶體系統上所需要swap space的數量.順便說一句incidentally,swap space應該是實體記憶體的2倍以上,
我認為這個世所知之的公理不一定正確,但是一些系統確實不需要swap space.
process memory deallocation
oracle heaps增長比收縮更為容易或快速readily,但是與主流觀點相反的是,它們可以也能收縮.v$mystat和v$sesstat的會話統計資訊session uga memory和
session pga memory分別顯示uga和pga heaps的當前大小,包括內部空閒空間.與之對應的統計資訊session uga memory max和session pga memory max顯示了會話生命周
期內每個heaps的峰值大小.
某些操作之後,uga和pga heaps才會進行收縮,比如一個disk sort的合併階段,或者顯式呼叫dbms_session.free_unused_user_memory過程free memory.但是,僅僅只有
完全空閒的heap extents會released給父heap或者給process data heap segment.甚至記憶體顯式被freed,一些內部的空閒空間仍會remains.
雖然從技術方面可以這樣作,在大多os下,oracle不會學試減少process data heap segment的大小及release虛擬記憶體給os.因此從os角度來講,一個oracle程式的虛擬記憶體
大小會保持在它的hwm標準上.oracle依賴os來頁出任何不用的虛擬記憶體(如有必要).因此,oracle程式所佔用的虛擬記憶體大小的統計資訊就會誤導人.相反應使用內部的oracle統計資訊,
甚至這些會誇大真實的記憶體需要.
在mts應用才會需要用dbms_session.free_unused_user_memory.應該謹慎使用它,僅僅只會把large package array variables使用的記憶體返回給large pool或共享池.
但是,記憶體首先應在uga heap中freed,這可以透過分配一個空佇列empty array給佇列變數,或者呼叫dbms_session.reset_package來達到目的.
請忽略dbms_session包上面的基於記憶體效果的說明之相關注解,它們僅用於一個用途或作用,曾經僅僅為了同一個目的或作用而重用(can only ever be reused for the same purpose).
經歷了一個large sort之後,有必要free unused user memory.what is intended is that memory所針對這部分記憶體,一旦分配給了一個subheap,通常情況下只在那個that subheap中可用,
直至整個subheap被freed.但是,許多subheaps,比如cga,freed過於快速致使語句至多產生了誤解(such as the cga,are freed so quicky that the statement is,at best misleading)
而且(此外)moreover,在一個sort後正常情況沒必要free unused user memory,not even甚至不是在mts應用中,因為大多數排序記憶體,實際上,自動進行freed.
taking headdumps
oracle支援提取heapdumps資訊,為了便於診斷一個潛在的記憶體問題.在當前程式中使用alter session set event可以提取heapdumps資訊,或者在另一個會話用oradebug event.
heapdumps資訊會寫入程式的dump目錄結構的一個trace file中,它包含x$表的大量對應資訊.
primary heaps的heapdumps的事件語法是immediate trace name heapdump level n.級別(n)是一個bit模式,代表要dump哪個heaps:1對應pga,2對應sga,4對應uga,8對應cga,32對應
large pool.
arbitrary subheaps任意的subheaps的heapdumps的事件語法是immediate trace name heapdump_addr level n,這裡n是heap descriptor描述符的十六進位制地址所對應的十進位制.
ksm x$表的ksmchpar列可以檢視subheap heap descriptor addresss,以及在它們parent heaps的heapdumps旁邊上的ds=string
reference參考
這節包含引數,事件,統計的一些快速指志資訊
parameters引數
引數 描述
_large_pool_min_alloc 大池大塊分配會四捨五入到這個值.預設是16k,不應被改變
_use_ism intimate親密共享記憶體預設被使用.但是,在一些os下實行這個是有問題的,因此有時有必要設定它為false
db_files log_files(oracle8.1之前)control_files 它們影響固定pga的大小.它們的大小不應大於任何必要的配置(they should not be any larger than reasonably necessary)
large_pools_size 滿足大池的一些large chunks of memory的必然需要certain demands.
lock_sga 如果os一直存在paging,應配置它為true,防止sga paging.
log_buffer 雖然它是sga一個獨立區域,但從大小上講它是微不足道的
open_cursors open_links max_enabled_roles 影響固定uga大小.它們的大小不要超過必要的大小
pre_page_sga 設定為true,會導致所有的oracle伺服器程式,在程式啟動時,必要時分page in整個sga.這樣會在實際啟動之後哪個期間馬上產生一個小小或微小marginal的效能提升,但這樣同時會帶來所有程式啟動變慢的風險.
sessions 它會對共享池的固定記憶體chunk的固定表的總計大小產生最大的影響
shared_memory_address hi_shared_memory_address 在一些os上,用它們指定sga應被附加attached在虛擬記憶體地址哪個區哉
shared_pool_reserved_size 從共享池reserved list中選出滿足大於5000bytes的共享池chunk分配大小allocations.這個引數設定reserved lists的大小(以bytes計).reserved list分配的門限值,由_shared_pool_reserved_min_alloc決定,不應被改變.
shared_pool_size 設定用於動態分配的共享池的大約的大小,以bytes表示
sort_area_size 此引數對記憶體使用與效能有很大影響
events事件
事件 描述
4030 這是程式記憶體錯誤事件的輸出out.為了提取發生匹配此精時間發生錯誤的pga,uga,cga,在你的引數檔案設定如下
event="4030 trace name heapdump level 13"
4031 這是共享記憶體錯誤事件的輸出.如果你發現系統一直重複報ora-04031錯誤,可以在引數檔案中設定如下事件以提取精確時間發生這個錯誤的sga heapdump資訊
event="4031 trace name heapdump level 2"
在mts環境中,為了包含一個uga heapdump,要採用level 6
10235 這個事件讓oracle server code不斷檢查記憶體完整性和heap管理資料結構.為了診斷一些可疑的記憶體損壞問題,有時這樣很有必要.但不幸的是,這個事件只適用下例項範圍,不能在單個程式上設定
statistics統計
統計 出處或源頭 描述
free memory v$sgastat sga heap的空閒記憶體.它包含固定記憶體chunk上面空閒列表和備用空閒記憶體的大塊,但不包含unpinned 重建大塊
session uga memory v$sesstat and v$mystat 會話uga heap的當前大小,不含固定uga
session uga memory max v$mystat and v$sesstat uga heap大小的hwm
session pga memory v$mystat and v$sesstat 會話pga heap的當前大小,不含固定pga
session pga memory max v$mystat and v$sesstat pga heap大小的hwm
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-662456/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 探索系列_神人steve adams之著oracle8i interal service(一)Oracle
- 探索系列_神人steve adams之著oracle8i interal service(二)Oracle
- 探索系列_神人steve adams之著oracle8i interal service(三)Oracle
- 探索系列_神人steve adams之著oracle8i interal service(四)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(五)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(六)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(七)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(八)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(九)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十一)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十二)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十三)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十四)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十五)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十六)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十七)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十八)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十九)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(二十)Oracle
- Steve Adams的《Oracle8i internal services for waits, latches, locks》試譯OracleAI
- script--by Steve Adams
- script--by Steve Adams--hidden_parameters.sqlSQL
- Android探索之Service全面回顧及總結Android
- 探索C#之系列目錄導航C#
- 沒閒著系列 18
- 螞蟻金服 Service Mesh 實踐探索
- 探索es6系列之—-Generator生成器函式函式
- Android之ServiceAndroid
- 前端獵奇系列之探索Python來反補JavaScript——上篇前端PythonJavaScript
- [ Office 365 開發系列 ] Graph Service
- 多執行緒系列(二十一) -ForkJoin使用詳解執行緒
- [微信小程式系列] 動畫案例之圓點沿著圓圈運動微信小程式動畫
- k8s之Service詳解-Service使用K8S
- Windows API 之 Windows ServiceWindowsAPI
- RAC筆記之service筆記
- gRPC 的增刪改查系列之service服務端介面編寫RPC服務端
- 重學c#系列——datetime 和 datetimeoffset[二十一]C#