一些基本的概念
數據庫(DB):是磁盤上的一系列物理文件,這個“數據庫”,不是我們平時口語中所說的“數據庫”,后面我會提到
mysql數據庫就是一堆frm、MYD、MYI、ibd文件
數據庫管理系統(DBMS):我們平時“口語中所說的數據庫",由數據庫+數據庫實例構成
數據庫實例(instance):操作系統中文件是死的,要使用文件(操作數據庫中的數據)就需要把文件讀到內存,實例就是干這個事的,
實例是由一系列進程(或線程)和內存區組成的,和數據庫打交道,都是通過實例來操作的
mysql,pg,oracle的進程和線程設計
mysql是單進程多線程設計的,oracle和postgres是多進程的,究其原因在這里:https://www.zhihu.com/question/20303558
大體就是后兩者出現的時間較早,那時候線程技術還不成熟
實例和進程:
一個mysql數據庫實例在系統表現上就是一個服務進程,對於實現mysql多實例,需再安裝一個端口號不同的mysql,例如InnoDB引擎的后台線程
- Master Thread負責將緩沖池中的數據異步刷新到磁盤
- IO Thread負責異步IO請求的回調處理。read thread線程數4個,write thread線程數4個
- Purge Thread負責事務被提交后,回收已經使用並分配的undo頁
- Page Cleaner Thread負責臟頁的刷新操作
pg中一個實例有多個進程,實例的總控進程是Postmaster,還有其他輔助進程,包括:SysLogger系統日志進程,BgWriter后台寫進程,WalWriter預寫式日志進程等
在同一台pg上創建一個實例,只需要指定一個不同的端口即可
實例和數據庫
一般的,對於mysql和pg來說,一個實例可以操作一個或多個數據庫