常用工具備忘錄

一直不懂發表於2020-12-04

把日常經常使用到了工具命令記錄在此,持續更新。

JDK

JDK基礎故障處理工具

MySQL

檢視當前事務隔離級別

mysql> show variables like ‘transaction_isolation’;

提交事務並自動啟動下一個事務

mysql> commit work and chain

查詢持續時間超過60s的事務

mysql> select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60

檢視select語句的最大執行時間,單位是毫秒

mysql> show variables like 'max_execution_time';

設定select語句的最大執行時間,session級別

mysql> set session max_execution_time=10000;

設定select語句的最大執行時間,全域性級別

mysql> set max_execution_time=3000;

設定select語句的最大執行時間,單條語句

mysql> select /*+ max_execution_time(3000)*/ count(*) from t where id>267;

重建索引

mysql> alter table T engine=InnoDB

設定庫為只讀模式

mysql> set global readonly=true

加全域性讀鎖FTWRL,資料更新語句(資料的增刪改)、資料定義語句(包括建表、修改表結構等)和更新類事務的提交語句會被阻塞

mysql> flush tables with read lock

表鎖lock tables … read/write,用unlock tables主動釋放鎖

-- 這個語句,則其他執行緒寫t1、讀寫t2的語句都會被阻塞。同時,執行緒A在執行unlock tables之前,
-- 也只能執行讀t1、讀寫t2的操作。連寫t1都不允許,自然也不能訪問其他表。
mysql> lock tables t1 read, t2 write; 

alter table語句裡面設定等待時間(MariaDB)

mysql> ALTER TABLE tbl_name NOWAIT add column …
mysql> ALTER TABLE tbl_name WAIT N add column

檢視死鎖檢測開關,預設on

mysql> show variables like 'innodb_deadlock_detect';

檢視鎖最大等待時間,預設50s

mysql> show variables like 'innodb_lock_wait_timeout'

設定事務隔離級別

mysql> SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

啟動事務確保這個語句執行完就可以得到一個一致性檢視

-- 等價begin with consistent snapshot
mysql> START TRANSACTION WITH CONSISTENT SNAPSHOT

select語句如果加鎖,也是當前讀

-- 讀鎖(S鎖,共享鎖)
mysql> select k from t where id=1 lock in share mode;
-- 寫鎖(X鎖,排他鎖)
mysql> select k from t where id=1 for update;

慢查詢日誌的閾值,0表示這個執行緒接下來的語句都會被記錄入慢查詢日誌中

mysql> set long_query_time=0;

強制使用索引

mysql> select * from t force index(a) where a between 10000 and 20000;

檢視錶索引資訊

mysql> show index from t;

重新統計索引資訊,影響explain命令看到的rows

mysql> analyze table t 

給表欄位加索引

-- 字首索引
mysql> alter table t add index idx_email(email(6));

檢視髒頁比例

mysql> select VARIABLE_VALUE into @a from global_status where VARIABLE_NAME = ‘Innodb_buffer_pool_pages_dirty’;
mysql> select VARIABLE_VALUE into @b from global_status where VARIABLE_NAME = ‘Innodb_buffer_pool_pages_total’;
mysql> select @a/@b;

動態調整重新整理髒頁的數量,innodb_io_capacity引數預設是200

mysql> SET GLOBAL innodb_io_capacity = 2000;

innodb_flush_neighbors 引數是InnoDB用來控制buffer pool刷髒頁時是否把髒頁鄰近的其他髒頁一起刷到磁碟,設定為0時,表示刷髒頁時不刷其附近的髒頁。設定為1時,表示刷髒頁時連帶其附近毗連的髒頁一起刷掉。設定為2時,表示刷髒頁時連帶其附近區域的髒頁一起刷掉。1與2的區別是2刷的區域更大一些。預設值:5.7版本為1, 8.0版本為0

mysql> show variables like 'innodb_flush_neighbors';

innodb表的資料是否獨立儲存,OFF表示表的資料放在系統共享表空間,也就是跟資料字典放在一起,ON表示每個InnoDB表資料儲存在一個以 .ibd為字尾的檔案中。MySQL 5.6.6版本開始,預設值ON

-- 察看當前設定
mysql> show global variables like 'innodb_file_per_table';  
-- 關閉innodb_file_per_table
mysql> set @@global.innodb_file_per_table=off;              -

Maven

使用maven-help-plugin檢視外掛詳細資訊,瞭解外掛目標的預設繫結階段

$ mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail
#在描述外掛的時候,還可以省去版本資訊,讓Maven自動獲取最新版本來進行表述,例如:
$ mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin
#進一步簡化,可以使用外掛目標字首替換座標:
$ mvn help:describe -Dplugin=compiler
#如果想僅僅描述某個外掛目標的資訊,可以加上goal引數:
$ mvn help:describe -Dplugin=compiler -Dgoal=compile
#如果想讓maven-help-plugin輸出更詳細的資訊,可以加上detail引數:
$ mvn help:describe -Dplugin=compiler -Ddetail

跳過單元測試,跳過測試程式碼的編譯

$ mvn package -DskipTests
#不僅僅想跳過測試執行,還想臨時性地跳過測試程式碼的編譯
$ mvn package -Dmaven.test.skip=true

動態指定要執行的測試用例

$ mvn test -Dtest=RandomTest
$ mvn test -Dtest=Random*Test
$ mvn test -Dtest=Random1Test,Random2Test
$ mvn test -Dtest=Random*Test,Random2Test
#如果maven-surefire-plugin找不到任何匹配的測試類,就會報錯並導致構建失敗,可以加上-DfailIfNoTests=false,告訴maven-surefire-plugin即使沒有任何測試也不要報錯:
$ mvn test -Dtest -DfailIfNoTests=false

Hive

Hive命令

相關文章