服务器的进程中mysqld的内存和虚拟内存在持续增长,增长的不快,大概半个小时1M的样子,持续不断的增长。
期间我在不断的往库中插入数据,删除数据,且频率比较高。
请问这是什么原因?
谢谢。
期间我在不断的往库中插入数据,删除数据,且频率比较高。
请问这是什么原因?
谢谢。
解决方案 »
- mysql查询结果合并
- 预处理嵌套游标无效!!!大神请进
- 如何快速查询如下结果?
- 求SQL~~~~
- 【求助】应用从ORACLE转MYSQL数据库的疑问
- mysql4.0安装后是什么样子的样子?疑惑!
- mysql 5.0中一个表最大可以存储多少条记录或者有多大的存储容量
- 这个select语句该怎么写好呢?
- mysql administrator 这个软件中,怎么用sql语句建数据表.
- VB中ADODC.Recordset.Addnew方法的使用!!?????????
- Mysql: Error 2003(HY000):Can't connect to MySQL server on 'localhost' (10061)
- 请教安装DBD::DBD-mysql,make test不能通过
wait_timeout我已经设为20了,Threads_connected一直小于10
110108 14:50:15 [Note] D:\MySQL\bin\mysqld: ready for connections.
Version: '5.1.46-community' socket: '' port: 3306 MySQL Community Server (GPL)
#MyISAM 使用特殊的类似树的cache来使得突发插入 (这些插入是,INSERT SELECT, INSERT VALUES (), (), , 以及 LOAD DATA INFILE) 更快. 此变量限制每个进程中缓冲树的字节数.设置为 0 会关闭此优化为了最优化不要将此值设置大于 “key_buffer_size”.要是只有myisam的话,我是设置成64的;
下面的列表中列出了mysqld服务器使用内存的一些方法。在适用的地方,给出了内存相关的系统变量名:· 键缓存(变量key_buffer_size)被所有线程共享;服务器使用的其它缓存则根据需要分配。参见7.5.2节,“调节服务器参数”。· 每个连接使用具体线程的空间:o 堆栈(默认64KB,变量thread_stack)o 连接缓存区(变量net_buffer_length)o 结果缓存区(变量net_buffer_length)连接缓存区和结果缓存区可以根据需要动态扩充到max_allowed_packet。当某个查询运行时,也为当前查询字符串分配内存。· 所有线程共享相同的基本内存。· 只有压缩MyISAM表映射到内存。这是因为4GB的32位内存空间不足以容纳大多数大表。当64位地址空间的系统变得越来越普遍后,我们可以增加常规的内存映射支持。· 对表进行顺序扫描的请求将分配一个缓存区(变量read_buffer_size)。· 当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读 缓存区(变量read_rnd_buffer_size)以避免硬盘搜索。· 所有联合在一个令牌内完成,并且大多数联合甚至可以不用临时表即可以完成。大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置mysqld的tmp_table_size选项来增加临时表的大小,或设置客户程序中的SQL选项SQL_BIG_TABLE。参见13.5.3节,“SET语法”。· 进行排序的大多数请求将分配一个排序缓存区,并根据结果集的大小为两个临时文件分配零。参见A.4.4节,“MySQL将临时文件储存在哪里”。· 几乎所有解析和计算在局部内存中完成。小项目不需要内存,因此避免了普通的慢内存分配和释放。只为不期望的大字符串分配内存;使用函数malloc()和free()来完成。· 对于每个打开的MyISAM表,索引文件打开一次;数据文件为每个并行运行的线程打开一次。对于每个并行线程,将分配一个表结构、一个每个列的列结构和大小为3 * N的缓存区(其中N是最大行的长度,而不是计算BLOB列)。一个BLOB列需要5至8个字节加上BLOB数据的长度。MyISAM 存储引擎维护一个额外的行缓存区供内部应用。· 对于每个具有BLOB列的表,将对缓存区进行动态扩大以读入大的BLOB 值。如果你扫描一个表,则分配一个与最大的BLOB值一样大的缓存区。· 所有使用的表的句柄结构保存在高速缓存中并以FIFO管理。默认情况,高速缓存有64个入口。如果某个表同时被两个运行的线程使用,高速缓存则为该提供两个入口。参见7.4.9节,“MySQL如何打开和关闭表”。· 当并行执行的线程结束时,FLUSH TABLE语句或mysqladmin flush-table命令可以立即关闭所有不使用的表并将所有使用中的表标记为已经关闭。这样可以有效释放大多数使用中的内存。FLUSH TABLE在关闭所有表之前不返回结果。ps和其它系统状态程序可以报导mysqld使用很多内存。这可以是在不同的内存地址上的线程栈造成的。例如,Solaris版本的ps将栈间未用的内存算作已用的内存。你可以通过用swap -s检查可用交换区来验证它。我们用商业内存漏洞探查器测试了mysqld,因此应该有没有内存漏洞。
用my-small 这个模板来用下,试试什么情况;除了myisam存储引擎,其他的存储引擎都skip掉;
# Example MySQL config file for small systems.
#
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld daemon
# doesn't use much resources.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is C:\mysql\data) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.# The following options will be passed to all MySQL clients
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock# Here follows entries for some specific programs# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
server-id = 1# Uncomment the following if you want to log updates
#log-bin=mysql-bin# binary logging format - mixed recommended
#binlog_format=mixed# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = C:\mysql\data/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:\mysql\data/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50[mysqldump]
quick
max_allowed_packet = 16M[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M[mysqlhotcopy]
interactive-timeout
==================楼主适当的加一下bulk_insert_buffer_size 的大小;和相应的sock地址,否则你的mysql可能开不起来;最好用你自己的自带的;
我讲key_buffer_size和bulk_insert_buffer_size 均调为64M。跑了一个晚上,内存还是在涨 啊。
怎么看有几个线程在并发?
threads_connected=8
刚才半个小时的样子,mysqld的内存从31涨到33,虚拟内存从277涨到了279还在涨啊