7.1 டிபி பக்கத்தில் கேச்சிங்
MySQL அட்டவணைகளுடன் பணிபுரியும் போது மிகவும் அளவிடக்கூடிய அல்காரிதம்களைப் பயன்படுத்துகிறது, எனவே MySQL சிறிய அளவிலான நினைவகத்துடன் கூட இயங்க முடியும். இயற்கையாகவே, சிறந்த செயல்திறனுக்காக, உங்களுக்கு அதிக ரேம் தேவை.
தற்போதைய அமைப்புகளைப் பார்க்க, தரவுத்தளத்துடன் இணைக்கவும்
#mysq -u root -p
mysql> show variables like 'query_cache%';
+------------------------------+-----------+
| Variable_name | Value |
+------------------------------+-----------+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 134217728 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+-----------+
5 rows in set (0.00 sec)
முதலில், கேச்சிங் இயக்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும். மாறி:
query_cache_type
(1) அல்லது தேவை (2) இல் இருக்க வேண்டும்query_cache_limit
- தற்காலிக சேமிப்பில் வரும் முடிவின் அதிகபட்ச அளவை தீர்மானிக்கிறதுquery_cache_size
பூஜ்ஜியத்திலிருந்து வித்தியாசமாக இருக்கும். DEMAND ஐப் பயன்படுத்தும் போது, கட்டளையைக் கொண்ட கோரிக்கைகள் மட்டுமே தற்காலிகமாக சேமிக்கப்படும்SQL_CACHE;
query_cache_min_res_unit
தற்காலிக சேமிப்பு வினவலின் முடிவுகளை சேமிப்பதற்காக ஒதுக்கப்பட்ட நினைவக தொகுதியின் குறைந்தபட்ச அளவு. MySQL நினைவகத்தின் ஒரு பெரிய துண்டில் தற்காலிக சேமிப்பை சேமிக்காது, மாறாக அதுquery_cache_min_res_unit
தேவைக்கேற்ப குறைந்தபட்ச அளவு (=4KB இயல்பாக) தொகுதிகளை ஒதுக்குகிறது. அத்தகைய கடைசி தொகுதி தரவு அளவிற்கு துண்டிக்கப்பட்டது, மீதமுள்ள நினைவகம் விடுவிக்கப்படுகிறது.
தற்காலிக சேமிப்பின் விளைவு என்னவென்றால், சேவையகம் ஒரு கோரிக்கையைப் பெறும்போது, கோரிக்கையின் ஹாஷ் தற்காலிக சேமிப்பில் உள்ளதா என்று பார்க்கிறது. ஹாஷ் பொருந்தினால் - சேவையகம் உடனடியாக முடிவை வழங்கும் - கோரிக்கையை பாகுபடுத்தாமல், மேம்படுத்துதல் போன்றவை. மேல்நிலை - கேச்சிங் பொறிமுறையுடன் - தற்காலிக சேமிப்பில் உலாவுதல், வினவல் முடிவை தற்காலிக சேமிப்பில் எழுதுதல் போன்றவை.
தற்காலிக சேமிப்பில் உங்களிடம் நிறைய சிறிய கோரிக்கைகள் இருந்தால், இது அதிக எண்ணிக்கையிலான இலவச தொகுதிகள் காரணமாக நினைவக துண்டு துண்டாக வழிவகுக்கும். இது, நினைவகம் இல்லாததால், தற்காலிக சேமிப்பு உள்ளீடுகளை நீக்குகிறது. இந்த வழக்கில், மதிப்பைக் குறைப்பது அர்த்தமுள்ளதாக இருக்கிறது query_cache_min_res_unit
. உங்கள் பெரும்பாலான வினவல்கள் பெரிய முடிவுகளைத் தந்தால், இந்த அமைப்பை அதிகரிப்பது செயல்திறனை மேம்படுத்தும்.
விளைவை மதிப்பீடு செய்ய முயற்சிப்போம். கேச் ஹிட் கவுண்டர்கள் எவ்வாறு மாறுகின்றன (Qcahe_hits), நினைவகம் இல்லாததால் செல்லுபடியாகாது என அறிவிக்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கை (Qcache_lowmem_prunes), SELECT வகையின் மொத்த கோரிக்கைகளின் எண்ணிக்கை (அவை மட்டும் தற்காலிகமாக சேமிக்கப்படுகின்றன):
#mysq -u root -p
mysql> show status like 'Qcache%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| Qcache_free_blocks | 715 |
| Qcache_free_memory | 130369640 |
| Qcache_hits | 24209 |
| Qcache_inserts | 16215 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 444 |
| Qcache_queries_in_cache | 1740 |
| Qcache_total_blocks | 4225 |
+-------------------------+-----------+
8 rows in set (0.00 sec)
7.2 தற்போதைய தற்காலிக சேமிப்பு நிலை
வினவல் தற்காலிக சேமிப்பு பயன்படுத்தப்படுகிறது SHOW STATUS
:
mysql> SHOW STATUS LIKE 'Qcache_%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 10 |
| Qcache_free_memory | 16755496 |
| Qcache_hits | 49812 |
| Qcache_inserts | 103999 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 180 |
| Qcache_queries_in_cache | 6 |
| Qcache_total_blocks | 28 |
+-------------------------+----------+
8 rows in set (0.00 sec)
Qcache_free_blocks
தற்காலிக சேமிப்பில் எத்தனை இலவச தொகுதிகள் உள்ளன என்பதைக் காட்டுகிறது (கேச் செய்யப்பட்ட கோரிக்கைகள் அதிகரிக்கும் போது குறையும்);Qcache_total_blocks
- ஆக்கிரமிக்கப்பட்ட தொகுதிகளின் எண்ணிக்கை;Qcache_free_memory
- கேச்சிங்கிற்கான இலவச "கிடைக்கும்" நினைவகத்தைக் காட்டுகிறது;Qcache_hits
- கோரிக்கைகளின் எண்ணிக்கை, தரவுத்தளத்தை உண்மையில் அணுகாமல், தற்காலிக சேமிப்பிலிருந்து எடுக்கப்பட்ட முடிவுகள்;Qcache_inserts
- தற்காலிக சேமிப்பில் சேர்க்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கை;Qcache_lowmem_prunes
- நினைவகம் இல்லாததால் தற்காலிக சேமிப்பிலிருந்து நீக்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கை;Qcache_not_cached
- நேர மேலாண்மை செயல்பாடுகள் போன்றவற்றின் பயன்பாடு காரணமாக தற்காலிக சேமிப்பில் எழுதப்படாத கோரிக்கைகளின் எண்ணிக்கை;Qcache_queries_in_cache
- தற்காலிக சேமிப்பில் உள்ள கோரிக்கைகளின் எண்ணிக்கை.
SELECT வினவல்களின் மொத்த எண்ணிக்கையை நீங்கள் பார்க்கலாம்:
mysql> show status like 'Com_select';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select | 16719 |
+---------------+-------+
1 row in set (0.00 sec)
7.3 கேச்சிங் திறன்
Qcache_hits on Qcache_hits + Com_select
“கோரிக்கையைச் செயலாக்கும் போது, Qcache_hits கவுண்டர் அதிகரிக்கிறது (கேச்சில் இருந்து கோரிக்கை செயலாக்கப்பட்டால்) அல்லது Com_select (கோரிக்கை தற்காலிகமாக சேமிக்கப்படாவிட்டால்) மாறியின் மதிப்பைப் பிரிப்பதன் மூலம் தற்காலிக சேமிப்பின் செயல்திறனை மதிப்பீடு செய்ய பரிந்துரைக்கப்படுகிறது . இந்த முறை "Mysql செயல்திறன் மேம்படுத்தல்" O'reilly இல் பரிந்துரைக்கப்படுகிறது
ஆன்லைனில் மற்றொரு வழி உள்ளது
qcache_hit_ratio = qcache_hits / (qcache_hits + qcache_inserts + qcache_not_cached)
இந்த மதிப்பு > 0.8 எனில், உங்கள் கோரிக்கைகளில் 80% தற்காலிகமாக சேமிக்கப்படும், இது ஒரு நல்ல குறிகாட்டியாகும்.
கேச் ஹிட் குறைவாக இருந்தால் %
, நீங்கள் மதிப்பை அதிகரிக்க வேண்டும் query_cache_size
.
தற்போதைய மதிப்பை இவ்வாறு பார்க்கலாம்:
SHOW VARIABLES LIKE 'query_cache_size';
மீண்டும், கேள்வி எழுகிறது: போதுமான மதிப்பை எவ்வாறு தேர்வு செய்வதுquery_cache_size?
இது உதவும் Qcache_lowmem_prunes
. இந்த மாறி புதிய கோரிக்கைகளை கேச் செய்ய வேண்டியதன் காரணமாக தற்காலிக சேமிப்பில் இருந்து நீக்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கையை சேமிக்கிறது. அத்தகைய கேச் அளவிற்காக பாடுபடுவது அவசியம், Qcache_lowmem_prunes
அது சற்று அதிகரிக்கும். Qcache_lowmem_prunes
இதைச் செய்ய, ஒரு மணி நேரத்திற்கு மதிப்புகளில் உள்ள வித்தியாசத்தையும் அதே நேரத்தில் mysql ஆல் பெறப்பட்ட கோரிக்கைகளின் எண்ணிக்கையையும் ஒப்பிட பரிந்துரைக்கப்படுகிறது .
“நடைமுறையில், query_cache_size ஐக் கணக்கிட 2 சூத்திரங்களில் ஒன்றைப் பயன்படுத்தலாம்:
query_cache_size = (number of requests for 10 minutes)*(average response volume on request) * 1,2
அல்லது
query_cache_size = (number of requests for 10 minutes)*(average response volume on request) * 1,2
query_cache_size = (10 நிமிடங்களில் போக்குவரத்து அளவு) * 1.2 "
இது 10 நிமிடங்களுக்கான கோரிக்கைகளை கேச் செய்யும்
நீங்கள் முறையே Bytes_sent மாறிகளைப் பயன்படுத்தி ஒரு கோரிக்கைக்கான பதிலின் எண்ணிக்கை மற்றும் சராசரி அளவைக் கணக்கிடலாம்
எனவே query_cache_size
நாங்கள் மதிப்புகளை அதிகரித்தோம், அதன் பிறகு நீங்கள் மதிப்புகளுக்கு கவனம் செலுத்த வேண்டும் Qcache_total_blocks
, Qcache_free_blocks
மற்றும் Qcache_queries_in_cache
. MySQL தொகுதிகளில் தற்காலிக சேமிப்பை சேமிக்கிறது. 1 கோரிக்கைக்கு, 2 தொகுதிகள் தேவை: ஒன்று கோரிக்கை உரைக்கு, இரண்டாவது முடிவுக்கு.
மதிப்பிலிருந்து அட்டவணையை நாம் கருத்தில் கொண்டால்Qcache%
கேச் தொகுதிகளின் மொத்த எண்ணிக்கைQcache_total_blocks – 28
கோரிக்கை 6 இப்போது தற்காலிகமாக சேமிக்கப்பட்டுள்ளது, அதாவது 6 * 2 = 12 தொகுதிகள் பிஸியாக உள்ளன
இலவச தொகுதிகள் Qcache_free_blocks – 10
. அதிக செயலற்ற நிலையில் Qcache_free_blocks
, தற்காலிக சேமிப்பின் "துண்டாக்குதல்" அளவு அதிகமாகும்.
பெரும்பாலான வினவல்களில் சிறிய அளவிலான தரவு இருந்தால், குறைந்தபட்ச கேச் தொகுதி அளவைக் குறைப்பது மதிப்பு query_cache_min_res_unit
, இது இயல்பாக 4 KB ஆகும்.
பெரும்பாலான கோரிக்கைகள் நிறைய தரவை வழங்கினால், கேச் தொகுதியின் அளவை அதிகரிப்பது மதிப்பு.
முக்கிய விஷயம் குறைந்தபட்ச மதிப்பை அடைவது Qcache_free_blocks
.
கவுண்டர் Qcache_not_cached
பெரியதாக இருந்தால், நீங்கள் மாறியை அதிகரிக்க முயற்சி செய்யலாம் query_cache_limit
- இது வரம்பை அதிகரிக்கவும், "பொருந்தாத" வினவல்களின் முடிவுகளை கேச் செய்யவும் அனுமதிக்கும்.
வினவல் தற்காலிக சேமிப்பைப் பயன்படுத்துவதற்கு பின்வரும் உள்ளமைவு மாறிகள் பொறுப்பாகும்:
query_cache_size
- வினவல் தற்காலிக சேமிப்பின் அளவு.query_cache_size = 0
தற்காலிக சேமிப்பு பயன்பாட்டை முடக்குகிறது;query_cache_limit
- தற்காலிக சேமிப்பில் சேமிக்கப்பட்ட அதிகபட்ச மாதிரியின் அளவு;query_cache_wlock_invalidate
- அவை சேர்ந்த டேபிள் வாசிப்பதற்காகப் பூட்டப்பட்டிருந்தால், தற்காலிக சேமிப்பிலிருந்து தரவு எடுக்கப்படுமா என்பதைத் தீர்மானிக்கிறது. =
mysql வினவல் தேக்ககத்தை இயக்க, my.cnf (பிரிவு [mysqld]) இல் பின்வரும் வரிகளைச் சேர்க்கவும் :
query_cache_size = 268435456
query_cache_type =1
query_cache_limit =1 048576
மற்றும் சேவையை மறுதொடக்கம் செய்யுங்கள்.
7.4 கேச் பயன்படுத்தப்படாத இடத்தில்
தற்காலிகமாக சேமிக்கப்படவில்லை:
- இருந்து கோரிக்கைகள்
SQL_NO_CACHE
- தயாரிக்கப்பட்ட வினவல்கள்
(Prepared statements);
- வெளிப்புற வினவலின் துணை வினவல்கள்;
- சேமிக்கப்பட்ட நடைமுறைகள் மற்றும் செயல்பாடுகளுக்குள் வினவல்கள்;
- செயல்பாடுகளைப் பயன்படுத்தும் வினவல்கள்:
BENCHMARK ()
,CONNECTION_ID ()
,CONVERT_TZ ()
, , , ,CURDATE ()
, , ஒரு வாதத்துடன் , , _ _ _ _ _ _ _ _ _ _CURRENT_DATE ()
CURRENT_TIME ()
CURRENT_TIMESTAMP ()
CURTIME ()
DATABASE ()
ENCRYPT ()
FOUND_ROWS ()
GET_LOCK ()
LAST_INSERT_ID ()
LOAD_FILE ()
MASTER_POS_WAIT ()
NOW ()
RAND ()
RELEASE_LOCK ()
SLEEP ()
SYSDATE ()
UNIX_TIMESTAMP ()
USER ()
UUID ();
- mysql கணினி தரவுத்தளங்கள் அல்லது INFORMATION_SCHEMA இல் சேமிக்கப்பட்ட செயல்பாடுகள், பயனர் மாறிகள் அல்லது குறிப்பு அட்டவணைகளைப் பயன்படுத்தி வினவல்கள் ;
- • பின்வரும் படிவங்களில் கோரிக்கைகள்:
SELECT ... IN SHARE MODE
SELECT ... FOR UPDATE
SELECT ... INTO OUTFILE ...
SELECT ... INTO DUMPFILE ...
SELECT * FROM ... WHERE autoincrement_col IS NULL
- தற்காலிக அட்டவணைகள் அல்லது அட்டவணைகளைப் பயன்படுத்தாத கேள்விகள்;
- எச்சரிக்கைகளை உருவாக்கும் கோரிக்கைகள் (எச்சரிக்கைகள்);
நீங்கள் கட்டளையுடன் தற்காலிக சேமிப்பை defragment செய்யலாம்:
mysql>flush query cache;
தெளிவான கட்டளை:
mysql>flush query cache;
அதி முக்கிய
இயல்புநிலை அமைப்புகளுடன் தயாரிப்பில் வேலை செய்ய வேண்டாம். இது பெரும்பாலான சேவையக ஆதாரங்கள் பயன்படுத்தப்படாமல் போகும். முறையான MySQL ட்யூனிங் தரவுத்தள செயல்திறனை பல மடங்கு மேம்படுத்தலாம். இது பயன்பாட்டை விரைவுபடுத்துவது மட்டுமல்லாமல், அதிக சுமையையும் சமாளிக்கும்.
GO TO FULL VERSION