一.MySQL分層架構(gòu)1.鏈接層處理網(wǎng)絡(luò)的鏈接,鏈接的網(wǎng)絡(luò)認(rèn)證。
- 查看鏈接權(quán)限
點(diǎn)擊(此處)折疊或打開
創(chuàng)新互聯(lián)的客戶來(lái)自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜希瑥膭?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、電商網(wǎng)站開發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開發(fā)。
-
mysql> select user,host from mysql.user\G;
-
ERROR 2006 (HY000): MySQL server has gone away
-
No connection. Trying to reconnect...
-
Connection id: 3
-
Current database: *** NONE ***
-
-
*************************** 1. row ***************************
-
user: mysql.session
-
host: localhost
-
*************************** 2. row ***************************
-
user: mysql.sys
-
host: localhost
-
*************************** 3. row ***************************
-
user: root
-
host: localhost
-
3 rows in set (0.00 sec)
-
-
ERROR:
-
No query specified
-
-
mysql> grant all on *.* to root@'%' identified by 'root';
-
Query OK, 0 rows affected, 1 warning (0.00 sec)
-
-
mysql> flush privilege;
- 查看連接
-
mysql> show processlist;
-
+----+------+-----------+------+---------+------+----------+------------------+
-
| Id | User | Host | db | Command | Time | State | Info |
-
+----+------+-----------+------+---------+------+----------+------------------+
-
| 3 | root | localhost | NULL | Query | 0 | starting | show processlist |
-
+----+------+-----------+------+---------+------+----------+------------------+
- kill 會(huì)話
kill 3;
kill query 4; 殺掉會(huì)話正在執(zhí)行的SQL,而不關(guān)閉會(huì)話。
- 連接池
(1).如果在程序中,頻繁的創(chuàng)建和銷毀mysql和客戶端連接,開銷很嚴(yán)重。
(2).為了減少相關(guān)的連接創(chuàng)建的開銷,在應(yīng)用層部署一個(gè)連接池。
(3).會(huì)保持一定的連接在連接池中,如果應(yīng)用想請(qǐng)求連接的話,不再需要向mysql請(qǐng)求,而是直接向連接池請(qǐng)求鏈接,減少了應(yīng)用和mysqld頻繁創(chuàng)建鏈接的開銷。
- 線程池
(1).每個(gè)連接過(guò)來(lái),就分配一個(gè)線程對(duì)該鏈接提供服務(wù),鏈接撤銷后就撤銷該線程,在連接的頻繁創(chuàng)建與銷毀過(guò)程中,會(huì)需要消耗一定的系統(tǒng)資源。
(2).為了避免這個(gè)情況的發(fā)生線程池內(nèi)部的線程是可以共用的,如果連接銷毀后,線程是不會(huì)被銷毀的,可以繼續(xù)為下一個(gè)連接提供服務(wù)。
(3).社區(qū)版沒(méi)有線程池的特性
2. SQL層SQL的查詢解析,分析,優(yōu)化,緩存以及所有的內(nèi)置函數(shù),所有存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn),比如存儲(chǔ)過(guò)程。
- 查詢緩存
query_cache_size 1048576
query_cache_type OFF
(1).如果mysql之前執(zhí)行的sql,直接從查詢緩存返回結(jié)果
(2).局限性比較大,任何查詢結(jié)果有變更,都需要進(jìn)行更新,還持有全局鎖,鎖力度很重,效率很低。
使用場(chǎng)景: 如果查詢的SQL語(yǔ)句和結(jié)果集比較固定,可以考慮開啟查詢緩存。
- 修改系統(tǒng)參數(shù)
show variables like 'log%';
(1).只讀參數(shù):關(guān)閉數(shù)據(jù)庫(kù)后進(jìn)行修改,重啟數(shù)據(jù)庫(kù)后生效,不能在線修改
mysql> set global query_cache_type=on;
ERROR 1651 (HY000): Query cache is disabled; restart the server with query_cache_type=1 to enable it
(2).在線參數(shù):可以直接開庫(kù)修改,不用重啟數(shù)據(jù)庫(kù)即可生效
(3).全局參數(shù):修改后,所有新會(huì)話,會(huì)生效
show global variable;
SET GLOBAL var_name = value;
(4).會(huì)話參數(shù):只在當(dāng)前會(huì)話生效
show session variable;
SET SESSION var_name = value;
- SQL執(zhí)行過(guò)程
(1).SQL解析(在數(shù)據(jù)庫(kù)內(nèi)部將sql文本轉(zhuǎn)換為sql解析樹)
(2).SQL優(yōu)化改寫
(3).SQL的執(zhí)行計(jì)劃確立
(4).SQL執(zhí)行
(5).binlog
3.存儲(chǔ)引擎層MySQL的存儲(chǔ)引擎在存儲(chǔ)引擎層,負(fù)責(zé)存儲(chǔ)數(shù)據(jù)。正是因?yàn)榉謱拥拇嬖?,?dǎo)致MySQL本身有一些局限性
mysql5.5版本之前默認(rèn)的存儲(chǔ)引擎是MyISAM
查看存儲(chǔ)引擎
show plugins;
建表的時(shí)候要選擇存儲(chǔ)引擎
create table t1 (id int) ENGINE=myisam;
show create table t1\G;
- Innodb MyISAM區(qū)別
- innodb表結(jié)構(gòu)設(shè)計(jì)
一對(duì)一
一對(duì)多
多對(duì)多
不推薦使用外鍵,因?yàn)榇笈坎迦霐?shù)據(jù)時(shí),每次插入都要檢查外鍵約束,造成性能大量消耗。 雖然不推薦,但是依賴關(guān)系依然存在。
- innodb和myisam讀寫性能測(cè)試
標(biāo)題名稱:mysql體系結(jié)構(gòu)
網(wǎng)頁(yè)網(wǎng)址:
http://weahome.cn/article/ihjggs.html