本文目錄一覽:
- 1、小內存編譯安裝mysql要加什麼參數
- 2、mysql編譯時哪個參數可以更改mysql默認字符集
- 3、MySQL cmake編譯時這些參數是什麼意思
- 4、mysql中convert()函數是什麼意思?
- 5、如何查看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-tw/n/229199.html