mysql源碼編譯常見參數解釋,mysql基本代碼

本文目錄一覽:

小內存編譯安裝mysql要加什麼參數

MySQL內存參數配置推薦:

1.慢查詢日誌:

slow_launch_time=2 查詢大於某個時間的值(單位:s)

slow_query_log=on/off 開啟關閉慢查詢日誌

slow_query_log_file=/opt/data/host-slow.log 慢查詢日誌位置

2.連接數:

max_connections MySQL最大連接數

back_log 當連接數滿了後,設置一個值,允許多少個連接進入等待堆棧

max_connect_errors 賬號連接到服務器允許的錯誤次數

connect_timeout 一個連接報文的最大時間(單位:s)

skip-name-resolve 加入my.cnf即可,MySQL在收到連接請求的時候,會根據請求包

中獲得的ip來反向追查請求者的主機名。然後再根據返回

的主機名又一次去獲取ip。如果兩次獲得的ip相同,那麼連接就成功建立了。

加了次參數,即可省去這個步驟

NOTES:

查詢當前連接數:show global status like ‘connections’;

3.key_buffer_size 索引緩存大小,是對MyISAM表性能影響最大的一個參數

32bit平台上,此值不要超過2GB,64bit平台不用做此限制,但也不要超過4GB

根據3點計算:

a.系統索引總大小

b.系統物理內存

c.系統當前keycache命中率

粗略計算公式:

Key_Size =key_number*(key_length+4)/0.67

Max_key_buffer_size

Threads_Usage = max_connections * (sort_buffer_size + join_buffer_size +

read_buffer_size+read_rnd_buffer_size+thread_stack)

key_cache_block_size ,是key_buffer緩存塊的單位長度,以字節為單位,默認值為1024。

key_cache_division_limit 控制着緩存塊重用算法。默認值為100,此值為key_buffer_size中暖鏈所佔的大小百分比(其中有暖鏈和熱鏈),100意味着全是暖鏈。(類似於Oracle Data Buffer Cache中的default、keep、recycle)

key_cache_age_threshold 如果key_buffer里的熱鏈里的某個緩存塊在這個變量所設定的時間裡沒有被訪問過,MySQL服務器就會把它調整到暖鏈里去。這個參數值越大,緩存塊在熱鏈里停留的時間就越長。

這個參數默認值為 300,最小值為100。

Myisam索引默認是緩存在原始key_buffer中的,我們可以手動創建新的key_buffer,如在my.cnf中加入參數new_cache.key_buffer_size=20M。指定將table1和table2的索引緩存到new_cache的key_buffer中:

cache index table1,table2 in new_cache;

(之前默認的key_buffer為default,現在手動創建的為new_cache)

手動將table1和table2的索引載入到key_buffer中:

load index into cache table1,table2;

系統中記錄的與Key Cache相關的性能狀態參數變量: global status

◆Key_blocks_not_flushed,已經更改但還未刷新到磁盤的DirtyCacheBlock;

◆Key_blocks_unused,目前未被使用的CacheBlock數目;

◆Key_blocks_used,已經使用了的CacheBlock數目;

◆Key_read_requests,CacheBlock被請求讀取的總次數;

◆Key_reads,在CacheBlock中找不到需要讀取的Key信息後到“.MYI”文件中(磁盤)讀取的次數;

◆Key_write_requests,CacheBlock被請求修改的總次數;

◆Key_writes,在CacheBlock中找不到需要修改的Key信息後到“.MYI”文件中讀入再修改的次數;

索引命中緩存率:

key_buffer_read_hits=(1-Key_reads/Key_read_requests)*100%

key_buffer_write_hits=(1-Key_writes/Key_write_requests)*100%

該命中率就代表了MyISAM類型表的索引的cache

4.臨時表 tmp_table_size (用於排序)

show global status like ‘created_tmp%’;

| Variable_name | Value |

| Created_tmp_disk_tables | 21197 | #在磁盤上創建臨時表的次數

| Created_tmp_files | 58 | #在磁盤上創建臨時文件的次數

| Created_tmp_tables | 1771587 | #使用臨時表的總次數

TmpTable的狀況主要是用於監控MySQL使用臨時表的量是否過多,

是否有臨時表過大而不得不從內存中換出到磁盤文件上。

a.如果:

Created_tmp_disk_tables/Created_tmp_tables10%,則需調大tmp_table_size

比較理想的配置是:

Created_tmp_disk_tables/Created_tmp_tables=25%

b.如果:

Created_tmp_tables非常大 ,則可能是系統中排序操作過多,或者是表連接方式不是很優化。

相關參數:

tmp_table_size 內存中,臨時表區域總大小

max_heap_table_size 內存中,單個臨時表的最大值,超過的部分會放到硬盤上。

5.table cache相關優化 :

參數table_open_cache,將表的文件描述符打開,cache在內存中

global status:

open_tables 當前系統中打開的文件描述符的數量

opened_tables 系統打開過的文件描述符的數量

如果:

Opened_tables數量過大,說明配置中table_open_cache值可能太小

比較合適的值為:

Open_tables / Opened_tables * 100% = 85%

Open_tables / table_open_cache * 100% = 95%

6.進程的使用情況

在MySQL中,為了儘可能提高客戶端請求創建連接這個過程的性能,實現了一個ThreadCache池,

將空閑的連接線程存放在其中,而不是完成請求後就銷毀。這樣,當有新的連接請求的時候,

MySQL首先會檢查ThreadCache池中是否存在空閑連接線程,如果存在則取出來直接使用,

如果沒有空閑連接線程,才創建新的連接線程。

參數:thread_cache_size

thread cache 池中存放的最大連接數

調整參考:

在短連接的數據庫應用中,數據庫連接的創建和銷毀是非常頻繁的,

如果每次都需要讓MySQL新建和銷毀相應的連接線程,那麼這個資源消耗實際上是非常大的,因此

thread_cache_size的值應該設置的相對大一些,不應該小於應用系統對數據庫的實際並發請求數。

參數:thread_stack – 每個連接線程被創建的時候,MySQL給他分配的內存大小,

類似PGA中存放數據的內存部分(不包括排序的空間)

show status like ‘connections’;

+—————+——-+

| Variable_name | Value |

+—————+——-+

| Connections | 80 | #接受到的來自客戶端的總連接數,包括以前和現在的連接。

+—————+——-+

show status like ‘thread%’;

+——————-+——-+

| Variable_name | Value |

+——————-+——-+

| Threads_cached | 0 | #當前系統中,緩存的連接數

| Threads_connected | 1 | #當前系統中正連接的線程數

| Threads_created | 77 | #創建過的總線程數

| Threads_running | 1 |

+——————-+——-+

a.如果:

Threads_created 值過大,說明MySQL一直在創建線程,這是比較消耗資源的,應該適當增大

thread_cache_size的值

b.如果:

Threads_cached的值比參數thread_cache_size小太多,則可以適當減小thread_cache_size的值

ThreadCache命中率:

Threads_Cache_Hit=(Connections-Threads_created)/Connections*100%

一般來說,當系統穩定運行一段時間之後,我們的ThreadCache命中率應該保持在90%

左右甚至更高的比率才算正常。

7.查詢緩存(Query Cache) — optional

將客戶端的SQL語句(僅限select語句)通過hash計算,放在hash鏈表中,同時將該SQL的結果集

放在內存中cache。該hash鏈表中,存放了結果集的內存地址以及所涉及到的所有Table等信息。

如果與該結果集相關的任何一個表的相關信息發生變化後(包擴:數據、索引、表結構等),

就會導致結果集失效,釋放與該結果集相關的所有資源,以便後面其他SQL能夠使用。

當客戶端有select SQL進入,先計算hash值,如果有相同的,就會直接將結果集返回。

Query Cache的負面影響:

a.使用了Query Cache後,每條select SQL都要進行hash計算,然後查找結果集。對於大量SQL

訪問,會消耗過多額外的CPU。

b.如果表變更比較頻繁,則會造成結果集失效率非常高。

c.結果集中保存的是整個結果,可能存在一條記錄被多次cache的情況,這樣會造成內存資源的

過度消耗。

Query Cache的正確使用:

a.根據表的變更情況來選擇是否使用Query Cache,可使用SQL Hint:SQL_NO_CACHE和SQL_CACHE

b.對於 變更比較少 或 數據基本處於靜態 的表,使用SQL_CACHE

c.對於結果集比較大的,使用Query Cache可能造成內存不足,或擠占內存。

可使用1.SQL_NO_CACHE 2.query_cache_limit控制Query Cache的最大結果集(系統默認1M)

mysql show variables like ‘%query_cache%’;

+——————————+———+

| Variable_name | Value |

+——————————+———+

| have_query_cache | YES | #是否支持Query Cache

| query_cache_limit | 1048576 | #單個結果集的最大值,默認1M

| query_cache_min_res_unit | 4096 | #每個結果集存放的最小內存,默認4K

| query_cache_size | 0 | #Query Cache總內存大小,必須是1024的整數倍

| query_cache_type | ON | #ON,OFF,DEMAND(包含SQL_CACHE的查詢中才開啟)

| query_cache_wlock_invalidate | OFF |

+——————————+———+

#query_cache_wlock_invalidate:

針對於MyISAM存儲引擎,設置當有WRITELOCK在某個Table上面的時候,

讀請求是要等待WRITE LOCK釋放資源之後再查詢還是允許直接從QueryCache中讀取結果,

默認為FALSE(可以直接從QueryCache中取得結果)

此為部分內容,附上原文出處:

mysql編譯時哪個參數可以更改mysql默認字符集

首先,MySQL的字符集問題主要是兩個概念,一個是Character Sets,一個是Collations,前者是字符內容

及編碼,後者是對前者進行比較操作的一些規則。這兩個參數集可以在數據庫實例、單個數據庫、表、列等四個級

別指定。

對於使用者來說,一般推薦使用utf8編碼來存儲數據。而要解決亂碼問題,不單單是MySQL數據的存儲問題,還

和用戶的程序文件的編碼方式、用戶程序和MySQL數據庫的連接方式都有關係。

首先,MySQL有默認的字符集,這個是安裝的時候確定的,在編譯MySQL的時候可以通過DEFAULT_CHARSET=

utf8和DEFAULT_COLLATION=utf8_general_ci這兩個參數(MySQL5.5版本,5.1版本用–with-charset=

utf8 –with-collation=utf8_general_ci)來指定默認的字符集為utf8,這也是最一勞永逸的辦法,這樣指定後,

客戶端連接到數據庫的編碼方式也默認是utf8了,應用程序不需要任何處理。

MySQL cmake編譯時這些參數是什麼意思

MySQL cMake 常規參數介紹

-DCMAKE_INSTALL_PREFIX= 指向mysql安裝目錄

-DINSTALL_SBINDIR=sbin 指向可執行文件目錄(prefix/sbin)

-DMYSQL_DATADIR=/var/lib/mysql 指向mysql數據文件目錄(/var/lib/mysql)

-DSYSCONFDIR=/etc/mysql 指向mysql配置文件目錄(/etc/mysql)

-DINSTALL_PLUGINDIR=lib/mysql/plugin 指向插件目錄(prefix/lib/mysql/plugin)

-DINSTALL_MANDIR=share/man 指向man文檔目錄(prefix/share/man)

-DINSTALL_SHAREDIR=share 指向aclocal/mysql.m4安裝目錄(prefix/share)

-DINSTALL_LIBDIR=lib/mysql 指向對象代碼庫目錄(prefix/lib/mysql)

-DINSTALL_INCLUDEDIR=include/mysql 指向頭文件目錄(prefix/include/mysql)

-DINSTALL_INFODIR=share/info 指向info文檔存放目錄(prefix/share/info)

prefix官方推薦設為/usr

類型csv,myisam,myisammrg,heap,innobase,archive,blackhole

若想啟用某個引擎的支持:-DWITH_ENGINE_STORAGE_ENGINE=1

如:

-DWITH_INNOBASE_STORAGE_ENGINE=1

-DWITH_ARCHIVE_STORAGE_ENGINE=1

-DWITH_BLACKHOLE_STORAGE_ENGINE=1

若想禁用某個引擎的支持:-DWITHOUT_ENGINE_STORAGE_ENGINE=1

如:

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1

-DWITHOUT_FEDERATED_STORAGE_ENGINE=1

-DWITHOUT_PARTITION_STORAGE_ENGINE=1

-DWITH_READLINE=1 啟用readline庫支持(提供可編輯的命令行)

-DWITH_SSL=system 啟用ssl庫支持(安全套接層)

-DWITH_ZLIB=system 啟用libz庫支持(zib、gzib相關)

-DWTIH_LIBWRAP=0 禁用libwrap庫(實現了通用TCP包裝的功能,為網絡服務守護進程使用)

-DMYSQL_TCP_PORT=3306 指定TCP端口為3306

-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock 指定mysql.sock路徑

-DENABLED_LOCAL_INFILE=1 啟用本地數據導入支持

-DEXTRA_CHARSETS=all 啟用額外的字符集類型(默認為all)

-DDEFAULT_CHARSET=utf8 指定默認的字符集為utf8

-DDEFAULT_COLLATION=utf8_general_ci 設定默認排序規則(utf8_general_ci快速/utf8_unicode_ci準確)

-DWITH_EMBEDDED_SERVER=1 編譯嵌入式服務器支持

-DMYSQL_USER=mysql 指定mysql用戶(默認為mysql)

-DWITH_DEBUG=0 禁用debug(默認為禁用)

-DENABLE_PROFILING=0 禁用Profiling分析(默認為開啟)

-DWITH_COMMENT=’string’ 一個關於編譯環境的描述性注釋

mysql中convert()函數是什麼意思?

mysql中convert()函數的意思是用來把一個數據類型的值轉換為另一個數據類型。

其他函數:

ASCII(s)  

作用: 返回字符串 s 的第一個字符的 ASCII 碼。

CHAR_LENGTH(s)  

作用: 返回字符串 s 的字符數。

CHARACTER_LENGTH(s)  

作用: 返回字符串 s 的字符數。

CONCAT(s1,s2…sn)    作用: 字符串 s1,s2 等多個字符串合併為一個字符串   。

CONCAT_WS(x, s1,s2…sn)    作用: 同 CONCAT(s1,s2,…) 函數,但是每個字符串之間要加上 x,x 可以是分隔符  。

FIELD(s,s1,s2…)   作用: 返回第一個字符串 s 在字符串列表(s1,s2…)中的位置  。

擴展資料:

MySQL 中文排序錯誤的解決方法

方法1

在 MySQL 數據庫中,進行中文排序和查找的時候,對漢字的排序和查找結果是錯誤的。這種情況在 MySQL 的很多版本中都存在。如果這個問題不解決,那麼 MySQL 將無法實際處理中文。

出現這個問題的原因是:MySQL

在查詢字符串時是大小寫不敏感的,在編繹 MySQL 時一般以 ISO-8859

字符集作為默認的字符集,因此在比較過程中中文編碼字符大小寫轉換造成了這種現象,一種解決方法是對於包含中文的字段加上 “binary”

屬性,使之作為二進制比較,

例如將 “name char(10)” 改成 “name char(10)binary”。

方法2

如果你使用源碼編譯 MySQL,可以編譯 MySQL 時使用 –with–charset=gbk 參數,這樣 MySQL 就會直接支持中文查找和排序了。

參考資料來源:百度百科-mySQL

如何查看mysql可用編譯參數

如何查看mysql可用編譯參數

查看nginx編譯參數:/usr/local/nginx/sbin/nginx -V查看apache編譯參數:cat /usr/local/apache2/build/config.nice查看mysql編譯參數:cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE查看php編譯參數:/usr/local/php/bin/php -i | grep configure

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/229199.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-10 12:08
下一篇 2024-12-10 12:08

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • 三星內存條參數用法介紹

    本文將詳細解釋三星內存條上面的各種參數,讓你更好地了解內存條並選擇適合自己的一款。 一、容量大小 容量大小是內存條最基本的參數,一般以GB為單位表示,常見的有2GB、4GB、8GB…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Spring Boot中發GET請求參數的處理

    本文將詳細介紹如何在Spring Boot中處理GET請求參數,並給出完整的代碼示例。 一、Spring Boot的GET請求參數基礎 在Spring Boot中,處理GET請求參…

    編程 2025-04-29
  • 雲智直聘 源碼分析

    本文將會對雲智直聘的源碼進行分析,包括前端頁面和後端代碼,幫助讀者了解其架構、技術實現以及對一些常見的問題進行解決。通過本文的閱讀,讀者將會了解到雲智直聘的特點、優勢以及不足之處,…

    編程 2025-04-29

發表回復

登錄後才能評論