MySQL中的實例、數據庫關系簡介
1、MySQL是單進程多線程(而Oracle等是多進程),也就是說MySQL實例在系 統上表現就是一個服務進程,即進程(通過多種方法可以創建多實例,再安裝一個端口號不同的mysql,或者通過workbench來新建一個端口號不同的 服務器實例等),該架構類似於SQL Server和Windows版本的Oracle;
2、MySQL實例是線程和內存組成,實例才是真正用於操作數據庫文件的(MySQL數據庫是由一些列物理文件組成,類似於frm、MYD、MYI、ibd結尾的文件);
3、一般情況下一個實例操作一個或多個數據庫(Oracle一個實例對應一個數據庫);集群情況下多個實例操作一個或多個數據庫。
注:在實例啟動的時候MySQL會讀取配置文件,類似於Oracle的spfile文件,不同的是Oracle如果找不到參數文件會啟動失
敗,MySQL如果找不到配置文件則會按照默認參數設置啟動實例。
—————————————————————————————————————————————————————————————————————————————
mysql中database、instance、session:
mysql中建立一個會話,不是和具體的數據庫相連接,而是跟某個instance建立會話(每個會話可以使用不同的用戶身份)。
而一個實例可以操作多個數據庫,故一個會話(在操作系統概念里,會話即是線程)可以操作一個實例上的多個數據庫。
簡單描述如下:instance >> database
—————————————————————————————————————————————————————————————————————————————
connection和session的定義和區別:
1.連接(connection)是一個物理的概念,它指的是一個通過網絡建立的客戶端和專有服務器(Dedicated Server)或調度器(Shared Server)的一個網絡連接。
2.會話(session)是一個邏輯的概念,它是存在於實例中。
注:創建一個連接(connection)實際上是在某個實例(instance,或者說是進程)中創建一個或多個線程。
兩者關系:
- 1、一個連接可以擁有多個會話也可以沒有會話(實際上,一條連接上的各個會話可以使用不同的用戶身份),同一個連接上的不同會話之間不會相互影響。
- 2、 兩個會話之間的影響,體現在鎖和鎖存,即對相同資源的操作(對象定義或數據塊)或請求(CPU/內存),它們的處理一般是按隊列來處理的,前面的沒有處理 好,后面的就要等待。如果以打電話來比喻:connect就好比你接通對方,這時,connect就建立了,有沒有通話,不管。雙方進行通話,則 session建立了,如果換人,則新的session建立,原session結束,類似的,可以在同一個connect上進行多個會話。最后,掛 機,connect結束。
—————————————————————————————————————————————————————————
1、會話可以創建多個事務
比如:使用客端連接數據庫,這樣你就可以執行很多個事務了
2、一個事務只能由一個會話產生
在數據庫里的事務,如果在執行的SQL都是由會話發起的,哪怕是自動執行的JOB也是由系統會話發起的
3、一個事務可能會產生一個或多個線程
比如RMAN備份,是可以創建多個線程可加快備份速度
4、一個線程在同一時間內只能執行一個事務
而一個線程,在沒結束當前事務是無法釋放資源來執行第二個事務
—————————————————————————————————————————————————————————
事務、會話與線程的關系和區別:
事務:簡單理解局勢一個業務需求的最小處理單位。
如:從A銀行卡轉賬500元到B銀行卡,事務就包括兩部分,1、從A卡減掉500元 2、從B卡加上500元
這兩個部分只要一個部分出錯,就要整體“回滾”,那這就是一個事務
會話:可以包含N個事務
如:你登陸網銀之后,可以重復轉賬步驟2次,第二次轉賬失敗,並不影響你第一次轉賬成功。
注:一個會話中可以由多個事務。線程是操作系統概念。