SpringCloud、集合多線程、緩存、消息隊列、分佈式項目開發以來遇到的各種坑與填坑。日常更新

docker pull astonika/hadoop

新做的Ubuntu下的Hadoop鏡像下拉使用。 Astonika的郵箱 [email protected] [email protected]

有時候MySQL數據庫cpu佔用或io會飆升超過100%,一般原因大概是有查詢或大批量的插入導致的。

解決方法:這時候用列出所有進程 show processlist,觀察所有進程 ,多秒沒有狀態變化的(幹掉),然後查看超時日誌或者錯誤日誌。

超過100臺MySQL時用puppet 安裝配置管理集羣啊,其他dsh

用lepus做數據庫監控,查詢慢日誌,另外還有zabbix可用。

volatile關鍵字 是JVM線程棧緩存失效穿透情況。

Docker 虛時問題 容器時間不對 差8個小時 是因爲容器用的是東一區時間

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

或 不在編寫Dockfile時 已在容器中時用 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 複製時區配置解決。

SpringCloud服務註冊與發現、消費、斷路、路由、高可用分佈式配置、消息總線、服務鏈路追蹤等

 

Java鎖類型:內置鎖(Instrinsic Lock)

 

Sql優化各種方法:

explain出來的各種item的意義;
select_type
表示查詢中每個select子句的類型
type
表示MySQL在表中找到所需行的方式,又稱“訪問類型”
possible_keys
指出MySQL能使用哪個索引在表中找到行,查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用
key
顯示MySQL在查詢中實際使用的索引,若沒有使用索引,顯示爲NULL
key_len
表示索引中使用的字節數,可通過該列計算查詢中使用的索引的長度
ref
表示上述表的連接匹配條件,即哪些列或常量被用於查找索引列上的值
Extra
包含不適合在其他列中顯示但十分重要的額外信息
(2)、profile的意義以及使用場景;
查詢到 SQL 會執行多少時間, 並看出 CPU/Memory 使用量, 執行過程中 Systemlock, Table lock 花多少時間等等。

 

MySQL數據庫大數據量,高增加改動量優化規則:

a. 設計良好的數據庫結構,允許部分數據冗餘,儘量避免join查詢,提高效率。
b. 選擇合適的表字段數據類型和存儲引擎,適當的添加索引。
c. mysql庫主從讀寫分離。
d. 找規律分表,減少單表中的數據量提高查詢速度。
e。添加緩存機制,比如memcached,apc等。
f. 不經常改動的頁面,生成靜態頁面。
g. 書寫高效率的SQL。比如 SELECT * FROM TABEL 改爲 SELECT field_1, field_2, field_3 FROM TABLE.

鎖的優化策略

1. 讀寫分離

2. 分段加鎖

3. 減少鎖持有的時間

4. 多個線程儘量以相同的順序去獲取資源

不能將鎖的粒度過於細化,不然可能會出現線程的加鎖和釋放次數過多,反而效率不如一次加一把大鎖。

索引的底層實現原理和優化

B+樹,經過優化的B+樹

主要是在所有的葉子結點中增加了指向下一個葉子節點的指針,因此InnoDB建議爲大部分表使用默認自增的主鍵作爲主索引。

還有什麼情況下設置了索引但無法使用

1.以“%”開頭的LIKE語句,模糊匹配

2. OR語句前後沒有同時使用索引

3. 數據類型出現隱式轉化(如varchar不加單引號的話可能會自動轉換爲int型)

實踐中優化MySQL最佳優化順序:

1.SQL語句及索引的優化

2. 數據庫表結構的優化

3.系統配置的優化

4.硬件的優化

 

優化數據庫的方法

  1. 選取最適用的字段屬性,儘可能減少定義字段寬度,儘量把字段設置NOTNULL,例如’省份’、’性別’最好適用ENUM
  2. 使用連接(JOIN)來代替子查詢
  3. 適用聯合(UNION)來代替手動創建的臨時表
  4. 事務處理
  5. 鎖定表、優化事務處理
  6. 適用外鍵,優化鎖定表
  7. 建立索引
  8. 優化查詢語句

mysql中,索引,主鍵,唯一索引,聯合索引的區別,對數據庫的性能的影響(讀寫兩方面):

索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含着對數據表裏所有記錄的引用指針。

普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對數據的訪問速度。

 

普通索引允許被索引的數據列包含重複的值。如果能確定某個數據列將只包含彼此各不相同的值,在爲這個數據列創建索引的時候就應該用關鍵字UNIQUE把它定義爲一個唯一索引。也就是說,唯一索引可以保證數據記錄的唯一性。

 

主鍵,是一種特殊的唯一索引,在一張表中只能定義一個主鍵索引,主鍵用於唯一標識一條記錄,使用關鍵字 PRIMARY KEY 來創建。

索引可以覆蓋多個數據列,如像INDEX(columnA, columnB)索引,這就是聯合索引。

 

索引可以極大的提高數據的查詢速度,但是會降低插入、刪除、更新表的速度,因爲在執行這些寫操作時,還要操作索引文件。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章