MySQL内存及虚拟内存优化设置参数

mysql 优化调试命令
 
1、mysqld --verbose --help
这个命令生成所有mysqld选项和可配置变量的列表
2、通过连接它并执行这个命令,可以看到实际上使用的变量的值:
mysql> SHOW VARIABLES;
还可以通过下面的语句看到运行服务器的统计和状态指标:
mysql>SHOW STATUS;
使用mysqladmin还可以获得系统变量和状态信息:
shell> mysqladmin variables
shell> mysqladmin extended-status
shell> mysqladmin flush-table 命令可以立即关闭所有不使用的表并将所有使用中的表标记为已经关闭,这样可以有效释放大多数使用中的内存。FLUSH TABLE在关闭所有表之前不返回结果。
 
swap -s检查可用交换区
 
mysql内存计算公式
 
mysql used mem = key_buffer_size + query_cache_size + tmp_table_size
+ innodb_buffer_pool_size + innodb_additional_mem_pool_size
+ innodb_log_buffer_size
+ max_connections * (
read_buffer_size + read_rnd_buffer_size
+ sort_buffer_size+ join_buffer_size
+ binlog_cache_size + thread_stack
)
 
在mysql 中输入如下命令,可自动计算自己的当前配置最大的内存消耗
 
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'innodb_additional_mem_pool_size';
SHOW VARIABLES LIKE 'innodb_log_buffer_size';
SHOW VARIABLES LIKE 'thread_stack';
SET @kilo_bytes = 1024;
SET @mega_bytes = @kilo_bytes * 1024;
SET @giga_bytes = @mega_bytes * 1024;
SET @innodb_buffer_pool_size = 2 * @giga_bytes;
SET @innodb_additional_mem_pool_size = 16 * @mega_bytes;
SET @innodb_log_buffer_size = 8 * @mega_bytes;
SET @thread_stack = 192 * @kilo_bytes;
SELECT
( @@key_buffer_size + @@query_cache_size + @@tmp_table_size
+ @innodb_buffer_pool_size + @innodb_additional_mem_pool_size
+ @innodb_log_buffer_size
+ @@max_connections * (
@@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size
+ @@join_buffer_size + @@binlog_cache_size + @thread_stack
) ) / @giga_bytes AS MAX_MEMORY_GB;
 
 
mysql关键参数设置
Mysqld 数据库的参数设置有两种类型,
 
一种是全局参数,影响服务器的全局操作;
另一种是会话级参数,只影响当前的客户端连接的相关操作。
 
服务器启动时,所有全局参数都初始化为默认值。可以在初始化文件或命令行中指定的选项来更改这些默认值。服务器启动后,通过连接服务器并执行 SET GLOBAL var_name 语句可以更改动态全局参数。要想更改全局参数,必须具有 SUPER 权限。全局参数的修改只对新的连接生效,已有的客户端连接并不会生效。
 
服务器还可以为每个客户端连接维护会话级参数,客户端连接时使用相应全局参数的当前值对客户端会话参数进行初始化。客户可以通过 SET SESSION var_name 语句来更改动态会话参数。设置会话级参数不需要特殊权限,但每个客户端可以只更改自己的会话级参数,不能更改其它客户的会话级参数。
不指定设置的参数类型时,默认设置的是会话级参数。

(1)、max_connections:
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 too many connections 错误。 默认数值是100,我把它改为1024 。

(2)、record_buffer:
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128k),我把它改为16773120 (16m)

(3)、key_buffer_size:
为了最小化磁盘的 I/O , MyISAM 存储引擎的表使用键高速缓存来缓存索引,这个键高速缓存的大小则通过 key-buffer-size 参数来设置。如果应用系统中使用的表以 MyISAM 存储引擎为主,则应该适当增加该参数的值,以便尽可能的缓存索引,提高访问的速度。

索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8m),我的mysql主机有2gb内存,所以我把它改为 402649088(400mb)。
默认情况下,所有的索引都使用相同的键高速缓存,当访问的索引不在缓存中时,使用 LRU ( Least Recently Used 最近最少使用)算法来替换缓存中最近最少使用的索引块。为了进一步避免对键高速缓存的争用,从 MySQL5.1 开始,可以设置多个键高速缓存,并为不同的索引键指定使用的键高速缓存。下面的例子演示如何修改高速键缓存的值,如何设置多个键高速缓存,以及如何为不同的索引指定不同的缓存:
显示当前的参数大小,为16M:
mysql> show variables like 'key_buffer_size';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| key_buffer_size | 16384 |
+-----------------+-------+
1 row in set (0.00 sec)
修改参数值到200M:
mysql> set global key_buffer_size=204800;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'key_buffer_size';
+-----------------+--------+
| Variable_name | Value |
+-----------------+--------+
| key_buffer_size | 204800 |
+-----------------+--------+
1 row in set (0.00 sec)
上面介绍的是默认的键缓存,下面介绍如何设置多个键缓存:
设置 hot_cache 的键缓存 100M , cold_cache 的键缓存 100M ,另外还有 200M 的默认的键缓存。如果索引不指定键缓存,则会放在默认的键缓存中。
mysql> set global hot_cache.key_buffer_size=102400;
Query OK, 0 rows affected (0.00 sec)
mysql> set global cold_cache.key_buffer_size= 1024 00;
Query OK, 0 rows affected (0.01 sec)
mysql> show variables like 'key_buffer_size';
+-----------------+--------+
| Variable_name | Value |
+-----------------+--------+
| key_buffer_size | 204800 |
+-----------------+--------+
1 row in set (0.00 sec)
如果要显示设置的多键缓存的值,可以使用:
mysql> SELECT @@global.hot_cache.key_buffer_size;
+------------------------------------+
| @@global.hot_cache.key_buffer_size |
+------------------------------------+
| 102400 |
+------------------------------------+
1 row in set (0.03 sec)
mysql> SELECT @@global.cold_cache.key_buffer_size;
+-------------------------------------+
| @@global.cold_cache.key_buffer_size |
+-------------------------------------+
| 102400 |
+-------------------------------------+
1 row in set (0.00 sec)
指定不同的索引使用不同的键缓存:
mysql> CACHE INDEX test1 in hot_cache;
+------------+--------------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------+--------------------+----------+----------+
| test .test1 | assign_to_keycache | status | OK |
+------------+--------------------+----------+----------+
1 row in set (0.00 sec)
mysql> CACHE INDEX test2 in hot_cache;
+------------+--------------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------+--------------------+----------+----------+
| test .test2 | assign_to_keycache | status | OK |
+------------+--------------------+----------+----------+
1 row in set (0.00 sec)
通常在数据库刚刚启动的时候,需要等待数据库热起来,也就是等待数据被缓存到缓存区中,这段时间数据库会因为 buffer 的命中率低而导致应用的访问效率不高。使用键高速缓存的时候,可以通过命令将索引预加载到缓存区中,大大缩短了数据库预热的时间。具体的操作方式是:
mysql> LOAD INDEX INTO CACHE test1,test2 IGNORE LEAVES;
+------------+--------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------+--------------+----------+----------+
| test .test1 | preload_keys | status | OK |
| test .test2 | preload_keys | status | OK |
+------------+--------------+----------+----------+
2 rows in set (3.89 sec)
如果已经使用 CACHE INDEX 语句为索引分配了一个键高速缓冲,预加载可以将索引块放入该缓存,否则,索引块将被加载到默认的键高速缓冲。

4)、back_log:
要求 mysql 能有的连接数量。当主要mysql线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
back_log 值指出在mysql暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的tcp/ip连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。
当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | null | connect | null | login | null 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。

(5)、interactive_timeout:
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 client_interactive 选项的客户。 默认数值是28800,我把它改为7200。

(6)、sort_buffer:
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速order by或group by操作。默认数值是2097144(2m),我把它改为 16777208 (16m)。

(7)、table_cache:
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。mysql对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。

(8)、thread_cache_size:
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 connections 和 threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。

(9)mysql的搜索功能
用mysql进行搜索,目的是能不分大小写,又能用中文进行搜索
只需起动mysqld时指定 --default-character-set=gb2312

(10)、wait_timeout:
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。
 
(11)、innodb_thread_concurrency:
你的服务器CPU有几个就设置为几,默认为8。
 
(12)、query_cache_size  与 query_cache_limit
QueryCache 之后所带来的负面影响:
a) Query 语句的hash 运算以及hash 查找资源消耗。当我们使用Query Cache 之后,每条SELECT
类型的Query 在到达MySQL 之后,都需要进行一个hash 运算然后查找是否存在该Query 的
Cache,虽然这个hash 运算的算法可能已经非常高效了,hash 查找的过程也已经足够的优化
了,对于一条Query 来说消耗的资源确实是非常非常的少,但是当我们每秒都有上千甚至几千
条Query 的时候,我们就不能对产生的CPU 的消耗完全忽视了。
b) Query Cache 的失效问题。如果我们的表变更比较频繁,则会造成Query Cache 的失效率非常
高。这里的表变更不仅仅指表中数据的变更,还包括结构或者索引等的任何变更。也就是说我
们每次缓存到Query Cache 中的Cache 数据可能在刚存入后很快就会因为表中的数据被改变而被
清除,然后新的相同Query 进来之后无法使用到之前的Cache。
c) Query Cache 中缓存的是Result Set ,而不是数据页,也就是说,存在同一条记录被Cache 多
次的可能性存在。从而造成内存资源的过渡消耗。当然,可能有人会说我们可以限定Query
Cache 的大小啊。是的,我们确实可以限定Query Cache 的大小,但是这样,Query Cache 就很
容易造成因为内存不足而被换出,造成命中率的下降。
 
QueryCache 的正确使用:
虽然Query Cache 的使用会存在一些负面影响,但是我们也应该相信其存在是必定有一定价值。我
们完全不用因为Query Cache 的上面三个负面影响就完全失去对Query Cache 的信心。只要我们理解了
Query Cache 的实现原理,那么我们就完全可以通过一定的手段在使用Query Cache 的时候扬长避短,重
发发挥其优势,并有效的避开其劣势。
首先,我们需要根据Query Cache 失效机制来判断哪些表适合使用Query 哪些表不适合。由于Query
Cache 的失效主要是因为Query 所依赖的Table 的数据发生了变化,造成Query 的Result Set 可能已经
有所改变而造成相关的Query Cache 全部失效,那么我们就应该避免在查询变化频繁的Table 的Query 上
使用,而应该在那些查询变化频率较小的Table 的Query 上面使用。MySQL 中针对Query Cache 有两个专
用的SQL Hint(提示):SQL_NO_CACHE 和SQL_CACHE,分别代表强制不使用Query Cache 和强制使用
Query Cache。我们完全可以利用这两个SQL Hint,让MySQL 知道我们希望哪些SQL 使用Query Cache 而
哪些SQL 就不要使用了。这样不仅可以让变化频繁Table 的Query 浪费Query Cache 的内存,同时还可以
减少Query Cache 的检测量。
其次,对于那些变化非常小,大部分时候都是静态的数据,我们可以添加SQL_CACHE 的SQL Hint,
强制MySQL 使用Query Cache,从而提高该表的查询性能。
最后,有些SQL 的Result Set 很大,如果使用Query Cache 很容易造成Cache 内存的不足,或者将
之前一些老的Cache 冲刷出去。对于这一类Query 我们有两种方法可以解决,一是使用SQL_NO_CACHE 参
数来强制他不使用Query Cache 而每次都直接从实际数据中去查找, 另一种方法是通过设定
“query_cache_limit”参数值来控制Query Cache 中所Cache 的最大Result Set ,系统默认为
1M(1048576)。当某个Query 的Result Set 大于“query_cache_limit”所设定的值的时候,Query
Cache 是不会Cache 这个Query 的。

(13)、innodb_buffer_pool_size
innodb_buffer_pool_size 定义了 InnoDB 存储引擎的表数据和索引数据的最大内存缓冲区大小。和 MyISAM 存储引擎不同, MyISAM 的 key_buffer_size 只能缓存索引键,而 innodb_buffer_pool_size 却可以缓存数据块和索引键。适当的增加这个参数的大小,可以有效的减少 InnoDB 类型的表的磁盘 I/O 。在一个以 InnoDB 为主的专用数据库服务器上,可以考虑把该参数设置为物理内存大小的 60%-80%
 
InnoDB占用的内存,除innodb_buffer_pool_size用于存储页面缓存数据外,另外正常情况下还有大约8%的开销,主要用在每个缓存页帧的描述、adaptive hash等数据结构,如果不是安全关闭,启动时还要恢复的话,还要另开大约12%的内存用于恢复,两者相加就有差不多21%的开销。

这样,12G的innodb_buffer_pool_size,最多的时候InnoDB就可能占用到14.5G(12G X 21%)的内存,再加上操作系统用的几百M,近千个线程堆栈,就差不多16G了。
 
MAX_QUERIES_PER_HOUR 用来限制用户每小时运行的查询数量:
mysql> grant all on dbname。* to db@localhost identified by “123456” with max_connections_per_hour 5;
(db用户在dbname的数据库上控制用户每小时打开新连接的数量为5个)
 
MAX_USER_CONNECTIONS 限制有多少用户连接MYSQL服务器:
mysql> grant all on dbname。* to db@localhost identified by “123456” with max_user_connections 2;
(db用户在dbname的数据库账户一次可以同时连接的最大连接数为2个)

MAX_UPDATES_PER_HOUR 用来限制用户每小时的修改数据库数据的数量:
mysql> grant all on dbname。* to db@localhost identified by “123456” with max_updates_per_hour 5;
(db用户在dbname的数据库上控制用户每小时修改更新数据库的次数为5次)
MAX_USER_CONNECTIONS 用来限制用户每小时的修改数据库数据的数量:
mysql> grant all on dbname。* to db@localhost identified by “123456”
With MAX_QUERIES_PER_HOUR 20 ;指mysql单个用户的最大连接数
(db用户在dbname的数据库上控制用户每小时的连接数为20个)
 
调优举例
针对my.cnf文件进行优化:
[mysqld]
skip-locking(取消文件系统的外部锁)
skip-name-resolve(不进行域名反解析,注意由此带来的权限/授权问题)
key_buffer_size = 256M(分配给MyISAM索引缓存的内存总数)对于内存在4GB左右的服务器该参数可设置为256M或384M。
  注意:该参数值设置的过大反而会是服务器整体效率降低!
  max_allowed_packet = 4M(允许最大的包大小)
  thread_stack = 256K(每个线程的大小)
  table_cache = 128K(缓存可重用的线程数)
  back_log = 384(临时停止响应新请求前在短时间内可以堆起多少请求,如果你需要在短时间内允许大量连接,可以增加该数值)
  sort_buffer_size = 2M(分配给每个线程中处理排序)
  read_buffer_size = 2M(读取的索引缓冲区大小)
  join_buffer_size = 2M(分配给每个线程中处理扫描表连接及索引的内存)
  myisam_sort_buffer_size = 64M(myisam引擎排序缓冲区的大小)
  table_cache = 512(缓存数据表的数量,避免重复打开表的开销)
  thread_cache_size = 64(缓存可重用线程数,见笑创建新线程的开销)
  query_cache_size = 64M(控制分配给查询缓存的内存总量)
  tmp_table_size = 256M(指定mysql缓存的内存大小)
  max_connections = 768(最大连接数)指mysql整个的最大连接数
max_connect_errors = 10000(最大连接错误数据)
  wait_timeout = 10(超时时间,可以避免攻击)
  thread_concurrency = 8(根据cpu数量来设置)
  skip-bdb 禁用不必要的引擎
  skip-networking(关闭mysql tcp/ip连接方式)
  Log-slow-queries = /var/log/mysqlslowqueries.log
  long_query_time = 4(设定慢查询的时间)
  skip-host-cache(提高mysql速度的)
  open_files_limit = 4096(打开文件数)
interactive_timeout = 10(服务器在关闭它前在一个交互连接上等待行动的秒数)
max_user_connections = 500(最大用户连接数)
 
key_buffer_size                 默认为218       调到128最佳
query_cache_size 
tmp_table_size                  默认为16M        调到64-256最挂

innodb_thread_concurrency=8       你的服务器CPU有几个就设置为几,默认为8
 
table_cache=1024 物理内存越大,设置就越大.默认为2402,调到512-1024最佳
innodb_additional_mem_pool_size=8M   默认为2M
innodb_flush_log_at_trx_commit=0 等到innodb_log_buffer_size列队满后再统一储存,默认为1
innodb_log_buffer_size=4M          默认为1M

read_buffer_size=4M                   默认为64K
read_rnd_buffer_size   随机读 缓存区  默认为256K
sort_buffer_size=32M                   默认为256K
max_connections=1024                 默认为1210
thread_cache_size=120             默认为60
 
性能测试
1、mysql 自带测试工具
shell> perl -MCPAN -e shell
cpan> install DBI
cpan> install DBD::mysql
shell> cd sql-bench
shell> perl run-all-tests --server=server_name
server_name是一个支持的服务器。要获得所有选项和支持的服务器,调用命令:
shell> perl run-all-tests --help
2、mysqlreport
 http://hackmysql.com/mysqlreport
 
参考文档
http://dev.mysql.com/doc/refman/5.1/zh/optimization.html
http://hackmysql.com/tools
http://www.imysql.cn/

(0)

相关推荐

  • mysql数据存储过程参数实例详解

    MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible). drop procedure if exists pr_param_in; create procedure pr_param_in ( in id

  • my.ini优化mysql数据库性能的十个参数(推荐)

    今天刚好需要配置mysql 5.5.45,因为数据库量挺大的,所以必须优化,要不mysql真的不快. (1).max_connections: 允许的同时客户的数量.增加该值增加 mysqld 要求的文件描述符的数量.这个数字应该增加,否则,你将经常看到 too many connections 错误. 默认数值是100,我把它改为1024 . (2).record_buffer: 每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区.如果你做很多顺序扫描,你可能想要增加该值.默认

  • MySQL修改tmpdir参数

    今天突然收到报警短信,说是/磁盘空间使用超过阀值.经查看,发现是有很多异常的SQL,执行不了,导致一直在处理,产生了临时占用了/tmp磁盘空间. 由于操作系统的/tmp空间有限,需要进行参数修改,将tmpdir的值路径进行修改. mysql> show variables like 'tmpdir'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | tmpdir | /tmp | +-

  • MySQL性能参数详解之Skip-External-Locking参数介绍

    MySQL的配置文件my.cnf中默认存在一行skip-external-locking的参数,即"跳过外部锁定".根据MySQL开发网站的官方解释,External-locking用于多进程条件下为MyISAM数据表进行锁定. 如果你有多台服务器使用同一个数据库目录(不建议),那么每台服务器都必须开启external locking:   参数解释 当外部锁定(external-locking)起作用时,每个进程若要访问数据表,则必须等待之前的进程完成操作并解除锁定.由于服务器访问数

  • MySQL性能参数详解之Max_connect_errors 使用介绍

    max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况.max_connect_errors的值与性能并无太大关系. 默认情况下,my.cnf文件中可能没有此行,如果需要设置此数值,手动添加即可. 参数格式 max_connect_errors = 10 修改方法 如果系统是CentOS.Debian等,则配置文件可能位于 /etc/my.cnf .打开此文件 [root@www ~]# vi /etc/my.cnf 然

  • MySQL内存及虚拟内存优化设置参数

    mysql 优化调试命令   1.mysqld --verbose --help 这个命令生成所有mysqld选项和可配置变量的列表 2.通过连接它并执行这个命令,可以看到实际上使用的变量的值: mysql> SHOW VARIABLES; 还可以通过下面的语句看到运行服务器的统计和状态指标: mysql>SHOW STATUS: 使用mysqladmin还可以获得系统变量和状态信息: shell> mysqladmin variables shell> mysqladmin ex

  • mysql Key_buffer_size参数的优化设置

    先来看看document对这个参数的解释: 缓存myisam表的索引块大小,可以被所有进程所共享.当设置key_buffer_size,操作系统不会马上分配key_buffer_size设置的值,而是在需要的时候,再分配的.可以设置多个key_buffer,当设置不是默认key_buffer为0时,mysql会把缓存的索引块移到默认的key_buffer中去并删除不再使用的索引块.Myisam表中只能cache索引块,不能cache数据块. 原本描述: Index blocks for MyIS

  • MySQL 5.5.x my.cnf参数配置优化详解

    一直有耳闻MySQL5.5的性能非常NB,所以近期打算测试一下,方便的时候就把bbs.kaoyan.com升级到这个版本的数据库.今天正好看到一篇有关my.cnf优化的总结,虽然还没经过我自己的实践检验,但从文章内容来说已经写的很详细了(当然,事实上下面这篇文章很多地方只是翻译了my.cnf原始配置文件的说明,呵呵),所以特地转载收藏一下,大家在对mysql服务器进行优化的时候可以作为参考,并根据实际情况对其中的一些参数进行调整.(特别备注:以下原文中有些参数事实上不适用于mysql5.5,不知

  • MySQL MyISAM 优化设置点滴

    最近在配置mysql服务器需要用到的一些设置,经过测试发现比较不错的配置方案,亮点在最后啊 先说一点问题:   Mysql中的InnoDB和MyISAM是在使用MySQL中最常用的两个表类型,各有优缺点.两种类型最主要的差别就是 InnoDB 支持事务处理与外键和行级锁.而MyISAM不支持.所以Myisam往往就容易被人认为只适合在小项目中使用.但是从数据库需求角度讲,要求99.9%的稳定性,方便的扩展性和高可用性来说的话,那MyISAM绝对应该是首选.MyISAM类型的表强调的是性能,其执行

  • MySQL性能优化配置参数之thread_cache和table_cache详解

    一.THREAD_CACHE MySQL里面为了提高客户端请求创建连接过程的性能,提供了一个连接池也就是 Thread_Cache池,将空闲的连接线程放在连接池中,而不是立即销毁.这样的好处就是,当又有一个新的请求的时候,mysql不会立即去创建连接 线程,而是先去Thread_Cache中去查找空闲的连接线程,如果存在则直接使用,不存在才创建新的连接线程. 有关Thread_Cache在MySQL有几个重要的参数,简单介绍如下: thread_cache_size Thread_Cache 中

  • mysql myisam 优化设置设置

    myisam_max_[extra]_sort_file_size足够大 delay_key_write减少io,提高写入性能 bulk_insert_buffer_size concurrent_insert 设置为2 read_rnd_buffer_size random scan 使用 read_buffer_size 顺序扫描表使用 key cache 的三种方式 key cache 预加载 SET GLOBAL hot_cache.key_buffer_size=16m SET BLO

  • Keras SGD 随机梯度下降优化器参数设置方式

    SGD 随机梯度下降 Keras 中包含了各式优化器供我们使用,但通常我会倾向于使用 SGD 验证模型能否快速收敛,然后调整不同的学习速率看看模型最后的性能,然后再尝试使用其他优化器. Keras 中文文档中对 SGD 的描述如下: keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False) 随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量 参数: lr:大或等于0的浮点数,学习率 momen

  • 101个MySQL的配置和优化的提示

    MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化 MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思路是通用的.我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧. MySQL 服务器硬件和操作系统调节: 1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中--在内存中访问文件时的速度要比在硬盘中访问时快的多.2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读

  • 详解MySQL索引原理以及优化

    前言 本文是美团一位大佬写的,还不错拿出来和大家分享下,代码中嵌套在html中sql语句是java框架的写法,理解其sql要执行的语句即可. 背景 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如"精通MySQL"."SQL语句优化"."了解数据库原理"等要求.我

  • MYSQL大量写入问题优化详解

    摘要:大家提到Mysql的性能优化都是注重于优化sql以及索引来提升查询性能,大多数产品或者网站面临的更多的高并发数据读取问题.然而在大量写入数据场景该如何优化呢? 今天这里主要给大家介绍,在有大量写入的场景,进行优化的方案. 总的来说MYSQL数据库写入性能主要受限于数据库自身的配置,以及操作系统的性能,磁盘IO的性能.主要的优化手段包括以下几点: 1.调整数据库参数 (1) innodb_flush_log_at_trx_commit 默认为1,这是数据库的事务提交设置参数,可选值如下: 0

随机推荐