You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
430 lines
14 KiB
430 lines
14 KiB
<!DOCTYPE html> |
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us"> |
|
<head> |
|
<title> |
|
MySQL Tuner // Hagfi.sh |
|
</title> |
|
|
|
<link href="http://gmpg.org/xfn/11" rel="profile"> |
|
<meta http-equiv="content-type" content="text/html; charset=utf-8"> |
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1"> |
|
|
|
<meta name="description" content=""> |
|
<meta name="keywords" content=""> |
|
<meta name="author" content="Olivier De Ram"> |
|
<meta name="generator" content="Hugo 0.92.0" /> |
|
|
|
<meta property="og:title" content="MySQL Tuner" /> |
|
<meta property="og:description" content="" /> |
|
<meta property="og:type" content="website" /> |
|
<meta property="og:locale" content="en_US" /> |
|
<meta property="og:url" content="https://blog.hagfi.sh/administration/mysql_tuner/" /> |
|
|
|
|
|
|
|
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/base-min.css"> |
|
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css"> |
|
|
|
|
|
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/grids-responsive-min.css"> |
|
|
|
|
|
|
|
<link rel="stylesheet" href="https://blog.hagfi.sh//css/redlounge.css"> |
|
<link rel="stylesheet" href="https://blog.hagfi.sh//css/prism.css"> |
|
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet"> |
|
<link href='//fonts.googleapis.com/css?family=Raleway:400,200,100,700,300,500,600,800' rel='stylesheet' type='text/css'> |
|
<link href='//fonts.googleapis.com/css?family=Libre+Baskerville:400,700,400italic' rel='stylesheet' type='text/css'> |
|
|
|
|
|
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/touch-icon-144-precomposed.png"> |
|
<link rel="shortcut icon" type="image/x-icon" href="/img/favicon.png"> |
|
|
|
|
|
<link href="" rel="alternate" type="application/rss+xml" title="Hagfi.sh" /> |
|
|
|
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js"></script> |
|
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script> |
|
<script src="//cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script> |
|
<script src="//cdnjs.cloudflare.com/ajax/libs/fuse.js/3.2.1/fuse.min.js"></script> |
|
<script src="//cdn.jsdelivr.net/npm/vuewordcloud@18.7.11/VueWordCloud.js"></script> |
|
<script src="https://blog.hagfi.sh//js/prism.js"></script> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script type="application/javascript"> |
|
var doNotTrack = false; |
|
if (!doNotTrack) { |
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ |
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), |
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) |
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); |
|
ga('create', 'UA-124890410-1', 'auto'); |
|
|
|
ga('send', 'pageview'); |
|
} |
|
</script> |
|
|
|
|
|
</head> |
|
|
|
<body> |
|
|
|
|
|
<div id="layout" class="pure-g"> |
|
<div class="sidebar pure-u-1 pure-u-md-1-4" id="app"> |
|
<div class="header"> |
|
|
|
|
|
|
|
|
|
<h1 class="brand-title"><a href="/">Hagfi.sh</a></h1> |
|
<h2 class="brand-tagline">A devops guide to the galaxy</h2> |
|
|
|
<div class="counters"> |
|
<a class="counter" href="/">13 |
|
<div class="counter-sub">Documents</div> |
|
</a> |
|
<a class="counter" href="/tags">29 |
|
<div class="counter-sub">Tags</div> |
|
</a> |
|
<a class="counter" href="/categories">3 |
|
<div class="counter-sub">Categories</div> |
|
</a> |
|
</div> |
|
|
|
<nav class="nav"> |
|
|
|
</nav> |
|
|
|
<div class="search-wrapper"> |
|
<input |
|
type="text" |
|
placeholder="Search ..." |
|
v-model="search" |
|
@keydown.down.prevent="navigate(1)" |
|
@keydown.up.prevent="navigate(-1)" |
|
@keyup.enter.prevent="navigate(result[selected].href)" |
|
ref="searchInput" |
|
class="search" |
|
/> |
|
|
|
<svg height="100" width="100" ref="resultPoint" class="result-point"> |
|
<circle cx="5" cy="5" r="5" fill="#FFF" /> |
|
</svg> |
|
|
|
<ul class="result-items"> |
|
<li v-for="r, i of result" class="result-item" ref="resultItem"> |
|
<div class="result-item-wrapper" :class="{ 'result-item-selected': selected === i }"> |
|
<div class="result-item-left"> |
|
<span class="post-date"> |
|
<span class="post-date-day"><sup v-text="moment(r.date).format('D')"></sup></span><span class="post-date-separator" v-text="'/'"></span><span class="post-date-month" v-text="moment(r.date).format('MMM')"></span> <span class="post-date-year" v-text="moment(r.date).format('YYYY')"></span> |
|
</span> |
|
<template v-if="r.author">By <a class="post-author" v-text="r.author"></a></template> |
|
</div> |
|
<div class="result-item-left"> |
|
<span class="result-item-separator nav-item-separator" v-text="'//'"></span><a :href="r.href" v-text="r.title" class="result-item-link"></a> |
|
</div> |
|
</div> |
|
</li> |
|
</ul> |
|
</div> |
|
|
|
|
|
|
|
</div> |
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="content pure-u-1 pure-u-md-3-4"> |
|
<a name="top"></a> |
|
|
|
|
|
|
|
|
|
<div id="toc" class="pure-u-1 pure-u-md-1-4"> |
|
<small class="toc-label">Contents</small> |
|
<nav id="TableOfContents"> |
|
<ul> |
|
<li><a href="#mysql-tuner">MySQL Tuner</a></li> |
|
</ul> |
|
</nav> |
|
</div> |
|
|
|
|
|
<section class="post"> |
|
<h1 class="post-title"> |
|
<a href="/administration/mysql_tuner/">MySQL Tuner</a> |
|
</h1> |
|
<h3 class="post-subtitle"> |
|
|
|
</h3> |
|
|
|
<span class="post-date"> |
|
<span class="post-date-day"><sup>25</sup></span><span class="post-date-separator">/</span><span class="post-date-month">Aug</span> <span class="post-date-year">2018</span> |
|
</span> |
|
|
|
|
|
|
|
<span class="post-author-single">By <a class="post-author" target="">Olivier De Ram</a></span> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h2 id="mysql-tuner">MySQL Tuner</h2> |
|
<table> |
|
<thead> |
|
<tr> |
|
<th>WAARDE</th> |
|
<th>ACTIE</th> |
|
</tr> |
|
</thead> |
|
<tbody> |
|
<tr> |
|
<td><code>query_cache_size</code></td> |
|
<td>AFBLIJVEN</td> |
|
</tr> |
|
<tr> |
|
<td><code>table_cache </code></td> |
|
<td>AFBLIJVEN <em>(maximumwaarde = 64)</em></td> |
|
</tr> |
|
<tr> |
|
<td><code>table_open_cache</code></td> |
|
<td>AFBLIJVEN</td> |
|
</tr> |
|
<tr> |
|
<td><code>join_buffer_size</code></td> |
|
<td>Verhogen indien <code>Joins performed without indexes++</code></td> |
|
</tr> |
|
<tr> |
|
<td><code>tmp_table_size</code></td> |
|
<td>Verhogen = <code>max_heap_table_size</code></td> |
|
</tr> |
|
<tr> |
|
<td><code>max_heap_table_size</code></td> |
|
<td>Verhogen <code>= tmp_table_size</code></td> |
|
</tr> |
|
<tr> |
|
<td><code>query_cache_type</code></td> |
|
<td><code>=1</code> indien <code>=0</code></td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
<p>mysql tuning improvements |
|
<code>table_cache</code> NOOIT hoger dan 64 |
|
Sudo vim /etc/my.cnf |
|
query_cache_size' => ‘256M’, |
|
It caches the select query along with the result set, which enables the identical selects to execute faster as the data fetches from the in memory. |
|
Caching voor select queries en bijhorende result sets, wat het mogelijk maakt om identieke selects sneller op te vragen uit memory. |
|
‘open_files_limit’ => ‘4096’, |
|
Changes the number of file descriptors available to mysqld. You should try increasing the value of this option if mysqld gives you the error Too many open files. |
|
‘join_buffer_size’ => ‘256K’, |
|
The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use indexes and thus perform full table scans. Normally, the best way to get fast joins is to add indexes. Increase the value of join_buffer_size to get a faster full join when adding indexes is not possible. |
|
Minimumgrootte van buffer voor index en table scans.</p> |
|
<hr> |
|
<p>‘max_heap_table_size’ => ‘32M’, |
|
This variable sets the maximum size to which user-created MEMORY tables are permitted to grow. |
|
Max grootte van user-created memory tables |
|
These 2 need to be the same size!!! |
|
‘tmp_table_size’ => ‘32M’, |
|
The maximum size of internal in-memory temporary tables. |
|
Max grootte van interne in-memory tijdelijke tabellen</p> |
|
<hr> |
|
<p>table_cache=64 (maximumwaarde!!) |
|
Table_Cache should always - well mostly anyway - be significantly bigger than the total number of tables in the server. Otherwise it’ll keep opening and closing tables. |
|
Maximumwaarde voor caching van geopende tabellen. |
|
thread_cache_size=4 |
|
How many threads the server should cache for reuse. |
|
Aantal threads dat de server kan cachen voor hergebruik. |
|
‘innodb_buffer_pool_size’ => ‘1G’, |
|
The size in bytes of the buffer pool, the memory area where InnoDB caches table and index data. The default value is 128MB.</p> |
|
<p>Sudo service mysql/mariadb reload (restart enkel onder toezicht)</p> |
|
<ul> |
|
<li><code>query_cache_*</code>:</li> |
|
</ul> |
|
<p><code>query_cache_type</code><br> |
|
Needs to be set to 1 to enable caching.<br> |
|
<code>query_cache_size</code><br> |
|
Is the size of the cache. This can be in bytes, or you can use a M suffix to specify the amount of megabytes.<br> |
|
<code>query_cache_limit</code><br> |
|
Is the maximum size of an individually cached query. Queries over this size won’t go into the cache. This is also in bytes, or megabytes with the M suffix. 1MB is a safe bet.<br> |
|
Maximumgrootte voor elke individuele gecachte query. Queries groter dan dit zullen niet gecacht worden.<br> |
|
<code>table_open_cache</code><br> |
|
Indicates the maximum number of tables the server keeps open</p> |
|
<hr> |
|
<p><code>innodb_buffer_pool_instances=2</code><br> |
|
<em>Enables the use of multiple threads for innodb.</em></p> |
|
<p><code>query_cache_type=1</code><br> |
|
<em>Enables query caching.</em></p> |
|
<p><code>join_buffer_size=1024K</code><br> |
|
<em>Increased the buffer size for non-indexed joins.</em></p> |
|
<p><code>tmp_table_size=64M && max_heap_table_size=64M</code><br> |
|
<em>Increased the size for temporary tables.</em></p> |
|
<p><code>join_buffer_size</code><br> |
|
<em>Omwille van het aantal JOIN queries uitgevoerd zonder indexes, werd de minimumgrootte van de buffer voor index en table scans verhoogd.</em></p> |
|
<p><code>max_heap_table_size & tmp_table_size</code><br> |
|
<em>De maximale grootte van user-created memory tables en van interne in-memory tijdelijke tabellen werd verhoogd.</em></p> |
|
<p><code>thread_cache_size</code><br> |
|
<em>Het maximale aantal threads dat de server kan cachen voor hergebruik werd verhoogd.</em></p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="paging"> |
|
<span class="paging-label">More Reading</span> |
|
|
|
<div class="paging-newer"> |
|
<span class="dark-red">Newer</span><span class="decorative-marker">//</span> |
|
<a class="paging-link" href="/administration/windows_troubleshooting/">Windows troubleshooting</a> |
|
</div> |
|
|
|
|
|
|
|
<div class="paging-older"> |
|
<span class="dark-red">Older</span><span class="decorative-marker">//</span> |
|
<a class="paging-link" href="/administration/letsencrypt/">Let's Encrypt</a> |
|
</div> |
|
|
|
</div> |
|
|
|
</section> |
|
|
|
<div id="disqus_thread"></div> |
|
<script type="application/javascript"> |
|
var disqus_config = function () { |
|
|
|
|
|
|
|
}; |
|
(function() { |
|
if (["localhost", "127.0.0.1"].indexOf(window.location.hostname) != -1) { |
|
document.getElementById('disqus_thread').innerHTML = 'Disqus comments not available by default when the website is previewed locally.'; |
|
return; |
|
} |
|
var d = document, s = d.createElement('script'); s.async = true; |
|
s.src = '//' + "hagfish" + '.disqus.com/embed.js'; |
|
s.setAttribute('data-timestamp', +new Date()); |
|
(d.head || d.body).appendChild(s); |
|
})(); |
|
</script> |
|
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> |
|
<a href="https://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a> |
|
|
|
|
|
<div class="footer"> |
|
<hr class="thin" /> |
|
<div class="pure-menu pure-menu-horizontal pure-menu-open"> |
|
<ul class="footer-menu"> |
|
|
|
</ul> |
|
</div> |
|
|
|
<p>© 2022. All rights reserved.</p> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
|
|
|
|
<script> |
|
var app = new Vue({ |
|
el: '#app', |
|
data: { |
|
fuse: null, |
|
search: "", |
|
result: [], |
|
index: [], |
|
selected: 0 |
|
}, |
|
mounted() { |
|
let self = this |
|
|
|
|
|
window.addEventListener("keypress", function(e) { |
|
self.$refs.searchInput.focus() |
|
}) |
|
|
|
let options = { |
|
shouldSort: true, |
|
threshold: 0.6, |
|
location: 0, |
|
distance: 100, |
|
maxPatternLength: 32, |
|
minMatchCharLength: 1, |
|
keys: [ |
|
"title", |
|
"author", |
|
"date", |
|
"content" |
|
] |
|
} |
|
axios.get('/index.json') |
|
.then(function (response) { |
|
self.index = response.data |
|
self.fuse = new Fuse(response.data, options) |
|
}) |
|
.catch(function (error) { |
|
}) |
|
}, |
|
watch: { |
|
result(nval, oval) { |
|
nval.length > 0 ? this.pointer(0) : this.pointer(-1) |
|
}, |
|
search(nval, oval) { |
|
this.result = this.fuse.search(nval) |
|
} |
|
}, |
|
methods: { |
|
navigate(val) { |
|
switch (val) { |
|
case 1: if (this.selected < this.result.length - 1) { this.selected++ }; break; |
|
case -1: if (this.selected > 0 ) { this.selected-- }; break; |
|
default: window.location.href = val; break; |
|
} |
|
this.pointer(this.selected) |
|
}, |
|
pointer(selected) { |
|
let self = this |
|
|
|
if (selected >= 0) { |
|
Vue.nextTick().then(function() { |
|
let height = self.$refs.resultItem[selected].clientHeight |
|
let top = self.$refs.resultItem[selected].getBoundingClientRect().top |
|
let left = self.$refs.resultItem[selected].getBoundingClientRect().left |
|
|
|
self.$refs.resultPoint.style.top = (top+height/2)+'px' |
|
self.$refs.resultPoint.style.left = (left-20)+'px' |
|
}) |
|
} else { |
|
this.$refs.resultPoint.style.left = '-50px' |
|
return |
|
} |
|
} |
|
} |
|
}) |
|
</script> |
|
</body> |
|
</html>
|
|
|