MySQL 可觀測性最佳實踐

MySQL 簡介

MySQL 是一個廣泛使用的開源關系型數據庫管理系統(RDBMS),以其高性能、可靠性和易用性而聞名,適用于各種規模的應用,從小型網站到大型企業級系統。

監控 MySQL 指標是維護數據庫健康、優化性能和確保數據安全的基礎,通過監控查詢響應時間和事務處理速度,可以及時發現并解決性能瓶頸。同時,監控 CPU 和內存使用情況有助于合理分配資源,避免過載。在出現故障時,歷史指標數據能夠快速定位和解決問題。此外,分析數據增長趨勢可以幫助提前規劃存儲擴展,防止空間不足。

采集全系統環境下 MySQL 相關指標信息:

  • MySQL Global Status 基礎數據采集
  • Schema 相關數據
  • InnoDB 相關指標
  • 支持自定義查詢數據采集

觀測云

觀測云是一款專為 IT 工程師打造的全鏈路可觀測產品,它集成了基礎設施監控、應用程序性能監控和日志管理,為整個技術棧提供實時可觀察性。這款產品能夠幫助工程師全面了解端到端的用戶體驗追蹤,了解應用內函數的每一次調用,以及全面監控云時代的基礎設施。此外,觀測云還具備快速發現系統安全風險的能力,為數字化時代提供安全保障。

部署 DataKit

DataKit 是一個開源的、跨平臺的數據收集和監控工具,由觀測云開發并維護。它旨在幫助用戶收集、處理和分析各種數據源,如日志、指標和事件,以便進行有效的監控和故障排查。DataKit 支持多種數據輸入和輸出格式,可以輕松集成到現有的監控系統中。

登錄觀測云控制臺,在「集成」 - 「DataKit」選擇對應安裝方式,當前采用 Linux 主機部署 DataKit。

MySQL 配置

前置條件
  • MySQL 版本 5.7+
創建監控賬號

創建監控賬號(一般情況,需用 MySQL root 賬號登陸才能創建 MySQL 用戶),使用 CREATE USER 語句來創建用戶。以下是一個示例。

注意:

  • 創建操作,限定了?datakit?這個用戶,只能在 MySQL 主機上(localhost)訪問 MySQL。
  • 如果需要對 MySQL 進行遠程采集,建議將?localhost?替換成?%(表示 DataKit 可以在任意機器上訪問 MySQL),也可用指定的 DataKit 安裝機器地址
該語句將在MySQL數據庫中創建一個名為'datakit'的用戶,并為該用戶設置密碼為'<UNIQUEPASSWORD>'
CREATE USER 'datakit'@'localhost' IDENTIFIED BY '<UNIQUEPASSWORD>';
-- MySQL 8.0+以上可使用caching_sha2_password 方法創建
CREATE USER 'datakit'@'localhost' IDENTIFIED WITH caching_sha2_password by '<UNIQUEPASSWORD>';
為監控賬號授權

注意:

  • 授權操作,限定了?datakit?這個用戶,只能在 MySQL 主機上(localhost)訪問 MySQL。
  • 如果需要對 MySQL 進行遠程采集,建議將 localhost 替換成 %(表示 DataKit 可以在任意機器上訪問 MySQL),也可用指定的 DataKit 安裝機器地址
GRANT PROCESS ON *.* TO 'datakit'@'localhost';
GRANT SELECT ON *.* TO 'datakit'@'localhost';
show databases like 'performance_schema';
GRANT SELECT ON performance_schema.* TO 'datakit'@'localhost';
GRANT SELECT ON mysql.user TO 'datakit'@'localhost';
GRANT replication client on *.*  to 'datakit'@'localhost';#性能指標采集需
CREATE SCHEMA IF NOT EXISTS datakit;
GRANT EXECUTE ON datakit.* to datakit@'%';
GRANT CREATE TEMPORARY TABLES ON datakit.* TO datakit@'%';-- MySQL 5.6 & 5.7
GRANT REPLICATION CLIENT ON *.* TO datakit@'%' WITH MAX_USER_CONNECTIONS 5;-- MySQL >= 8.0
ALTER USER datakit@'%' WITH MAX_USER_CONNECTIONS 5;
GRANT REPLICATION CLIENT ON *.* TO datakit@'%';
GRANT PROCESS ON *.* TO datakit@'%';

Tips:

  • 如用 localhost 時發現采集器有如下報錯,需要將上述步驟的 localhost 換成 ::1
    Error 1045: Access denied for user 'datakit'@'localhost' (using password: YES)
  • 另外,也需要注意下 MySQL 5.7 和 8.0 版本,授權上有所區別。

DataKit 采集器配置

DataKit 內置了 MySQL 采集器,采集 MySQL 相關數據。

  • 進入 datakit 安裝目錄下的?conf.d/db?目錄,復制?mysql.conf.sample?并命名為?mysql.conf
cp mysql.conf.sample mysql.conf
  • 調整?mysql.conf
[[inputs.mysql]]host = "localhost"user = "datakit"pass = "<PASS>"port = 3306[inputs.mysql.log]# files = ["/var/log/mysql/*.log"]## grok pipeline script pathpipeline = "mysql.p"## Config dbm metric [inputs.mysql.dbm_metric]enabled = true## Config dbm sample [inputs.mysql.dbm_sample]enabled = true  ## Config dbm activity[inputs.mysql.dbm_activity]enabled = true  # 開啟數據庫性能指標采集dbm = true...# 監控指標配置[inputs.mysql.dbm_metric]enabled = true# 監控采樣配置[inputs.mysql.dbm_sample]enabled = true# 等待事件采集[inputs.mysql.dbm_activity]enabled = true   ...[inputs.mysql.tags]# some_tag = "some_value"# more_tag = "some_other_value"
  • 重啟 DataKit
datakit service -R

高級配置(采集更多性能指標)

Binlog 開啟

統計 Binlog 大小,需要開啟 MySQL 對應 Binlog 功能(默認情況下,MySQL Binlog 默認是不開啟的)。

1、檢查狀態

-- ON: 開啟/OFF: 關閉
SHOW VARIABLES LIKE 'log_bin';

2、開啟 Binlog 的步驟

開啟 MySQL 的 Binlog 功能主要涉及修改 MySQL 的配置文件并重啟服務。

1)編輯 MySQL 配置文件:找到 MySQL 的配置文件?my.cnf?或?my.ini,通常位于?/etc/mysql?目錄下,如果找不到可以通過命令?find / -name "my.cnf"?進行查找。

2)添加 Binlog 配置:在配置文件的?[mysqld]?部分添加以下配置:

  • log_bin=ON:開啟 Binlog 日志。
  • log_bin_basename=/var/lib/mysql/mysql-bin:指定 Binlog 日志的基本文件名。
  • log_bin_index=/var/lib/mysql/mysql-bin.index:指定 Binlog 文件的索引文件。
  • server-id=1:為 MySQL 服務分配一個唯一的 ID,用于在復制集群中標識服務器 1。

3)簡單配置方式:也可以只添加一行配置?log-bin=/var/lib/mysql/mysql-bin,MySQL 會自動設置?log_bin?為 ON 狀態,并自動設置?log_bin_index?文件。

4)對于 MySQL 5.7 及以上版本:如果使用的是 5.7 及以上版本,在添加上述配置后,還需要重啟 MySQL 服務,否則可能會報錯。

5)重啟 MySQL 服務:配置完成后,需要重啟 MySQL 服務以使配置生效。可以使用命令?service mysqld restart?進行重啟。

6)驗證 Binlog 是否開啟:通過登錄 MySQL 并執行?SHOW VARIABLES LIKE '%log_bin%';?來檢查 Binlog 是否已經開啟。

7)查看 Binlog 日志:可以通過?SHOW MASTER LOGS;?查看所有 Binlog 日志列表,或者使用?mysqlbinlog?工具查看 Binlog 內容。

3、數據庫性能指標采集

修改配置文件(如 mysql.conf),開啟?MySQL Performance Schema,并配置相關參數。

[mysqld]
performance_schema = on
max_digest_length = 4096
performance_schema_max_digest_length = 4096
performance_schema_max_sql_text_length = 4096
performance-schema-consumer-events-statements-current = on
performance-schema-consumer-events-waits-current = on
performance-schema-consumer-events-statements-history-long = on
performance-schema-consumer-events-statements-history = on

4、創建存儲過程?explain_statement,用于獲取 SQL 執行計劃

DELIMITER $$
CREATE PROCEDURE datakit.explain_statement(IN query TEXT)SQL SECURITY DEFINER
BEGINSET @explain := CONCAT('EXPLAIN FORMAT=json ', query);PREPARE stmt FROM @explain;EXECUTE stmt;DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

5、consumers?配置

---------------方式1-------------------:DELIMITER $$
CREATE PROCEDURE datakit.enable_events_statements_consumers()SQL SECURITY DEFINER
BEGINUPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
END $$
DELIMITER ;GRANT EXECUTE ON PROCEDURE datakit.enable_events_statements_consumers TO datakit@'%';---------------方式2-------------------:
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
主從復制指標采集

1、前提條件

采集主從復制?mysql_replication?指標的前提是開啟主從復制,mysql_replication?指標都是由從數據庫采集的。

確認主從復制環境是否正常可以在從數據庫輸入:

SHOW SLAVE STATUS;

Replica_IO_Running、Replica_SQL_Running 的值均為 Yes,說明主從復制環境狀態正常。

2、count_transactions_in_queue

將【組復制插件】添加到服務器在啟動時加載的插件列表(group_replication 從 MySQL 版本 5.7.17 開始支持)。在從數據庫的配置文件?/etc/my.cnf?中,添加一行。

plugin_load_add ='group_replication.so'

通過?show plugins;?確認組復制插件已安裝。

show plugins

3、DataKit mysql 采集器配置

新增以下配置內容:

[[inputs.mysql]]## Set replication to true to collect replication metrics
replication = true
## Set group_replication to true to collect group replication metrics
group_replication = true  
...

關鍵指標

指標描述類型單位
Aborted_clients因客戶端未正常關閉連接而導致連接被終止的次數intcount
Aborted_connects連接到MySQL服務器失敗的嘗試次數intcount
Binlog_cache_disk_use使用臨時二進制日志緩存但超出binlog_cache_size值,并使用臨時文件存儲事務語句的事務數量intB
Binlog_cache_use使用二進制日志緩存的事務數量intB
Binlog_space_usage_bytes總二進制日志文件大小intB
Bytes_received從所有客戶端接收的字節數intB
Bytes_sent向所有客戶端發送的字節數intB
Com_commit執行提交語句的次數intcount
Com_delete執行刪除語句的次數intcount
Com_delete_multi執行多表刪除語句的次數intcount
Com_insert執行插入語句的次數intcount
Com_insert_select執行插入選擇語句的次數intcount
Com_load執行加載語句的次數intcount
Com_replace執行替換語句的次數intcount
Com_replace_select執行替換選擇語句的次數intcount
Auto_Position如果使用自動定位則為1,否則為0boolcount
Connect_Retry連接重試之間的時間間隔(默認為60秒)。可以通過CHANGE MASTER TO語句設置intcount
Exec_Master_Log_PosSQL線程已讀取并執行的當前源二進制日志文件中的位置,標志著下一個要處理的事務或事件的開始intcount
Last_Errno這些列是Last_SQL_Errno的別名intcount
Last_IO_Errno導致I/O線程停止的最近一次錯誤的錯誤編號。錯誤編號為0且消息為空字符串表示“無錯誤”intcount
Last_SQL_Errno導致SQL線程停止的最近一次錯誤的錯誤編號。錯誤編號為0且消息為空字符串表示“無錯誤”intcount
Master_Server_Id源的server_id值intcount
Relay_Log_Space所有現有中繼日志文件的總大小intcount
Replicas_connected連接到復制源的副本數量intcount
SQL_Delay副本必須落后于源的秒數intcount
Seconds_Behind_Master主服務器和從服務器之間的延遲秒數intcount

更多指標描述,參考觀測云官方文檔。

日志采集

MySQL 運行日志

如需采集 MySQL 的日志,將配置中 log 相關的配置打開,如需要開啟 MySQL 慢查詢日志,需要開啟慢查詢日志,在 MySQL 中執行以下語句:

SET GLOBAL slow_query_log = 'ON';
-- 未使用索引的查詢也認為是一個可能的慢查詢
set global log_queries_not_using_indexes = 'ON';

注意:在使用日志采集時,需要將 DataKit 安裝在 MySQL 服務同一臺主機中,或使用其它方式將日志掛載到 DataKit 所在機器。

MySQL 日志分為普通日志和慢日志兩種。

MySQL 普通日志

日志原文:

2017-12-29T12:33:33.095243Z         2 Query     SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%partitioned%';

切割后的字段列表如下:

字段名字段值說明
statusWarning日志級別
msgSystem table 'plugin' is expected to be transactional.日志內容
time1514520249954078000納秒時間戳(作為行協議時間)
MySQL 慢查詢日志

日志原文:

# Time: 2019-11-27T10:43:13.460744Z
# User@Host: root[root] @ localhost [1.2.3.4]  Id:    35
# Query_time: 0.214922  Lock_time: 0.000184 Rows_sent: 248832  Rows_examined: 72
# Thread_id: 55   Killed: 0  Errno: 0
# Bytes_sent: 123456   Bytes_received: 0
SET timestamp=1574851393;
SELECT * FROM fruit f1, fruit f2, fruit f3, fruit f4, fruit f5

切割后的字段列表如下:

字段名字段值說明
bytes_sent123456發送字節數
db_hostlocalhosthostname
db_ip1.2.3.4IP
db_slow_statementSET timestamp=1574851393;\nSELECT * FROM fruit f1, fruit f2, fruit f3, fruit f4, fruit f5慢查詢 SQL
db_userroot[root]用戶
lock_time0.000184鎖時間
query_id35查詢 ID
query_time0.2l4922SQL 執行所消耗的時間
rows_examined72為了返回查詢的數據所讀取的行數
rows_sent248832查詢返回的行數
thread_id55線程 ID
time1514520249954078000納秒時間戳(作為行協議時間)

如果值是?OFF,請參考阿里云相關?文檔?進行開啟。

場景視圖

登錄觀測云控制臺,點擊「場景」 -「新建儀表板」,輸入 “mysql”, 選擇 “mysql 監控視圖”,點擊 “確定” 即可添加視圖。

MySQL 監控視圖

MySQL DBM 監控視圖

MySQL Activity 監控視圖

MySQL Slow Query 監控視圖

監控器(告警)

MySQL 每秒立即獲得鎖的數過高告警

MySQL 每秒獲取鎖數量過高會導致性能瓶頸、死鎖風險、事務延遲及業務中斷,本質是資源爭用,需通過優化事務邏輯、降低鎖粒度、調整隔離級別和分布式架構等手段解決。

MySQL 慢查詢數量過高告警

MySQL 慢查詢數量過高會導致數據庫性能瓶頸、資源耗盡及業務響應延遲,通常由索引缺失或低效查詢引起,需通過優化 SQL 語句、添加索引或調整執行計劃解決。

MySQL 由于客戶端沒有正確關閉連接而中止的連接數過高告警

MySQL 因客戶端未正確關閉連接導致的中止連接數過高告警具有顯著必要性,其直接危害包括:資源耗竭(占用內存、線程及文件描述符)、性能下降(連接握手與回收開銷增大)、穩定性風險(連接泄漏引發服務崩潰)及安全隱患(潛在攻擊者利用殘留連接)。該告警可幫助及時識別代碼缺陷、網絡異常或連接池配置問題,通過優化客戶端連接釋放邏輯、調整 wait_timeout/interactive_timeout 參數、引入連接池管理等方式,避免數據庫因“連接雪崩”陷入不可用狀態,保障服務高可用性與資源高效利用。

總結

MySQL 指標監控對于維護數據庫的健康和性能至關重要。它允許管理員實時跟蹤關鍵性能指標,如查詢響應時間、連接數、緩沖池使用情況和磁盤 I/O 活動。通過這些數據,可以識別和解決性能瓶頸,預測資源需求,優化數據庫配置,以及確保數據的完整性和安全性。此外,監控還可以幫助檢測和防范潛在的攻擊,通過觀測云設置告警閾值快速響應異常活動,減少系統故障時間,從而提高數據庫的可靠性和業務連續性。總之,MySQL 指標監控是數據庫管理的核心部分,對于保障企業數據資產的穩定性和高效性起著至關重要的作用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82451.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82451.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82451.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CentOS安裝最新Elasticsearch8支持向量數據庫

大家都知道Elasticsearch是支持向量的存儲和查詢的&#xff0c;今天我們來介紹下如何安裝支持向量數據庫的Elasticsearch &#xff0c; 操作環境是CentOS。 成功安裝截圖 大家進入系統shell&#xff0c;跟我執行下面命令進行安裝。 更新系統 [rootlocalhost ~]# sudo yum u…

SDL2常用函數SDL事件處理:SDL_Event|SDL_PollEvent

SDL_Event SDL_Event是個聯合體&#xff0c;是SDL中所有事件處理的核心。 SDL_Event是SDL中使用的所有事件結構的并集。 只要知道了那個事件類型對應SDL_Event結構的那個成員&#xff0c;使用它是一個簡單的事情。 下表羅列了所有SDL_Event的所有成員和對應類型。 Uint32typ…

webpack吐環境分析

需要解決的問題 扣取下來的webpack文件過大 解決思路 用ast將需要的代碼扣下來 結果展示 實現步驟 第一步&#xff1a;我們得知道需要哪些模塊 在入口處&#xff0c;增加模塊記錄 第二步&#xff0c;分析ast代碼 通過分析發現,key 有三種值 分別為NumbericLiteral、StringLi…

微軟語音合成助手資源下載

微軟語音合成助手資源下載 【下載地址】微軟語音合成助手資源下載 微軟語音合成助手是一款基于先進AI技術的文本轉語音工具&#xff0c;能夠將文字內容快速轉換為自然流暢的語音。它支持高度自定義的語音參數&#xff0c;包括語速、音調、發音和停頓等&#xff0c;滿足多樣化需…

青少年編程與數學 02-020 C#程序設計基礎 01課題、C#編程概要

青少年編程與數學 02-020 C#程序設計基礎 01課題、C#編程概要 一、微軟.NET開發平臺1. 核心組件2. 特點3. 應用場景4. 開源與社區5. 版本與更新6. 學習資源 二、C# 編程語言1. 歷史背景2. 語言特性&#xff08;1&#xff09;面向對象&#xff08;2&#xff09;類型安全&#xf…

圖片文件未正確加載?—— Webpack 無法正確解析圖片,生成了一個空的 Base64 URL

如果你打印出的圖片 URL 是 data:image/png;base64, 后面沒有實際的 Base64 數據&#xff0c;可能有以下幾種原因&#xff1a; ??1. 圖片文件未正確加載?? ??可能原因??&#xff1a;圖片路徑錯誤&#xff0c;導致 Webpack 無法正確解析圖片&#xff0c;生成了一個空的…

3D打印仿造+ AI大腦賦能,造出會思考的全景相機

在自然界的生存競賽里&#xff0c;節肢動物堪稱視覺界的 "卷王"&#xff01;那些長著復眼的小機靈鬼&#xff0c;比如蜜蜂、蜻蜓&#xff0c;別看個頭小&#xff0c;視覺能力卻超強。 現在&#xff0c;科學家把它們的眼睛 " 偷"過來啦 —— 不是真偷&…

rabbitmq單機多實例部署

RabbitMQ 單實例部署 單實例部署是指在一臺服務器上運行一個 RabbitMQ 實例。這種部署方式適用于小型應用或開發環境,配置簡單,資源占用較少。單實例部署的核心是安裝 RabbitMQ 并啟動服務,通常需要配置 Erlang 環境,因為 RabbitMQ 是基于 Erlang 編寫的。單實例部署的優勢…

知識宇宙-職業篇:后端工程師

名人說&#xff1a;博觀而約取&#xff0c;厚積而薄發。——蘇軾《稼說送張琥》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄 一、后端工程師的定義與職責1. 什么是后端工程師&#xff1f;2. 主要工作職責 二、…

機試 | vector/array Minimum Glutton C++

題目地址 &#xff1a; C - Minimum Glutton #include<stdio.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {//N:菜肴數&#xff0c;X&#xff1a;總甜度閾值&#xff0c;Y&#xff1a;總咸度閾值int…

【Django ORM】三萬字了解Django ORM的基本概念和基本使用

第一章 Django ORM 概述 1.1 什么是Django ORM 1.1.1 ORM的基本概念 ORM 即對象關系映射&#xff08;Object Relational Mapping&#xff09;&#xff0c;它是一種編程技術&#xff0c;用于在面向對象編程語言&#xff08;如 Python&#xff09;和關系型數據庫&#xff08;如…

在springboot項目中是否可以使用兩個不同地址的redis

在Spring Boot項目中可以通過多數據源配置的方式使用兩個不同地址的Redis實例。以下是具體實現方案 1.依賴配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusio…

JMeter 教程:監控性能指標 - 第三方插件安裝(PerfMon)

目錄 【簡單介紹】 ? PerfMon 插件是什么&#xff1f; &#x1f6e0;? 安裝 PerfMon 插件 方法一&#xff1a;使用 JMeterPluginsManager 安裝&#xff08;推薦&#xff09; &#x1f50c; 安裝完成后組件介紹 &#x1f310; 服務端安裝 ServerAgent&#xff08;用于被…

【后端高階面經:數據庫篇】19、分庫分表查詢困境:無分庫分表鍵時的高效應對

一、分庫分表下的無分片鍵查詢困境 在分布式數據庫架構中,分庫分表通過分片鍵(如買家ID)將數據分散存儲,顯著提升了單表性能和系統擴展性。然而,當業務需要從非分片鍵維度(如賣家ID)進行查詢時,傳統架構暴露出以下核心問題: 1.1 跨分片掃描的性能災難 數據分散性:以…

ARM架構

目錄 哈佛結構 arm指令格式 有符號數的溢出&#xff08;8bit)? 無符號數的進位/借位 CPSR&#xff08;當前程序狀態寄存器&#xff09; ARM模式 arm異常類型 ARMv7架構異常向量表 arm異常的處理流程 arm寄存器 堆棧指針寄存器 arm模式切換流程 LDR指令、STR指令 指…

canvas(三)-動畫3d

在 <canvas> 中實現 3D 動畫通常需要借助 WebGL 技術,因為原生的 2D 上下文(CanvasRenderingContext2D)無法直接支持 3D 渲染。WebGL 是基于 OpenGL ES 2.0 的 JavaScript API,可以直接在瀏覽器中實現高性能的 3D 圖形渲染。以下是關于 <canvas> 3D 動畫的概念…

右鍵打開 pycharm 右鍵 pycharm

文件夾右鍵打開pycharm aaa.reg notepad 右下角把文件格式改為&#xff1a;ansi Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\PyCharm] "Open with PyCharm" "Icon""\"D:\\soft\\PyCharm 2024.1.4\\bi…

一張紙決定的高度

從我捧起《格局》這個本書開始&#xff0c;轉眼間兩個月過去了。 回頭望一望&#xff0c;好似還在昨天。 這兩個月&#xff0c;心態在變&#xff0c;前進的方向在變&#xff0c;但唯一不變的就是每天晚上睡前&#xff0c;留給自己十分鐘的讀書時光。 我也從來沒想過&#xf…

R 語言科研繪圖 --- 熱力圖-匯總

在發表科研論文的過程中&#xff0c;科研繪圖是必不可少的&#xff0c;一張好看的圖形會是文章很大的加分項。 為了便于使用&#xff0c;本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中&#xff0c;獲取方式&#xff1a; R 語言科研繪圖模板 --- sciRplothttps://mp.…

新手到資深的Java開發編碼規范

新手到資深的開發編碼規范 一、前言二、命名規范&#xff1a;代碼的 “第一印象”2.1 標識符命名原則2.2 命名的 “自描述性” 原則2.3 避免魔法值 三、代碼格式規范&#xff1a;結構清晰的視覺美學3.1 縮進與空格3.2 代碼塊規范3.3 換行與斷行 四、注釋規范&#xff1a;代碼的…