关于几个配置参数的不解,请高手指点. 针对innodb表: select查询,通过索引树找到数据库的物理地址数据.然后返回数据.(以下返回,有点疑问) 1.read_buffer_size 或 read_rnd_buffer_size
(这个参数是在innodb里面用来设置一次性读取多少物理地址数据的吗?直接跟I/O打交道?读一次I/O 加1?)
↓
↓
↓
2.innodb_buffer_pool_size
(这个参数是接受第1步 传过来的数据,放到里面吗? 还是在InnoDB里面直接与I/O打交道.不需要第1步的数据?)
(如果这个参数的数据装满,把数据放到第3步?)
↓
↓
↓
3.tmp_table_size
(这个参数是接受第2步 传过来的数据,放到这个里面吗?)
(这一步,附加一个问题:我把tmp_table_size设置为500M时(整个数据库也没有500M). 为什么在查询较大的
数据时.这个Created_tmp_disk_tables为什么还是要+1呢?我认为内存足够用了,为什么还要创建磁盘表?)
↓
↓
↓
4.sort_buffer_size
(如果有排序,这个参数是接受第3步的数据吗?如果它不够?怎么办?)
↓
↓
↓
在请问一下,以上返回步骤正确吗?
额。随便在问一个吧 join_buffer_size 在全连接的时候给每个线程创建。
我想问的是:join_buffer_size里面装的是什么数据。 2个表连接起来的数据吗? 如果是这样。是否应该把这个值设置
的很大为好?
(这个参数是在innodb里面用来设置一次性读取多少物理地址数据的吗?直接跟I/O打交道?读一次I/O 加1?)
是的,MYSQL一次性从磁盘文件中读取多少字节的数据。这样可以避免你顺序地每读一个记录都去进行一次磁盘IO。
这个参数不是INNODB的,是对于整个MYSQL的。 2.innodb_buffer_pool_size
(这个参数是接受第1步 传过来的数据,放到里面吗? 还是在InnoDB里面直接与I/O打交道.不需要第1步的数据?)
(如果这个参数的数据装满,把数据放到第3步?)
与read_buffer_size 或 read_rnd_buffer_size无关,这个是存放数据和索引的缓存。如果缓存中数据已经有了,则MYSQL INNODB则不需要到进行磁盘IO,直接从缓存中取数据即可。 这个缓存是根据LRU原则来进行调度管理的。
(这个参数是接受第2步 传过来的数据,放到这个里面吗?)
(这一步,附加一个问题:我把tmp_table_size设置为500M时(整个数据库也没有500M). 为什么在查询较大的
数据时.这个Created_tmp_disk_tables为什么还是要+1呢?我认为内存足够用了,为什么还要创建磁盘表?)
与其它刚才提到的参数无关。是创建内存临时表的字节限制。如果MYSQL自己需要创建的临时表很大,超过这个定义,则会创建临时的MYISAM表。 4.sort_buffer_size
(如果有排序,这个参数是接受第3步的数据吗?如果它不够?怎么办?)
如果 第3项中有ORDER BY,则会使用到这个参数的限制。 使用这个内存进行排序操作,如果不够则生成磁盘临时文件。
的很大为好?两 表JOIN时存储它们的相关列到这个BUFFER, MYSQL中对这个BUFFER使用的算法如下。for each row in t1 matching range {
for each row in t2 matching reference key {
store used columns from t1, t2 in join buffer
if buffer is full {
for each row in t3 {
for each t1, t2 combination in join buffer {
if row satisfies join conditions,
send to client
}
}
empty buffer
}
}
}if buffer is not empty {
for each row in t3 {
for each t1, t2 combination in join buffer {
if row satisfies join conditions,
send to client
}
}
}
那请问innodb_buffer_pool_size里面的数据,也是直接从物理磁盘中过去吗?直接使用I/O?(如果不是,请问这个参数的数据怎么得到 )
我想不会吧。因为read_buffer_size 或 read_rnd_buffer_size也是从磁盘读数据...2个参数都去读???不会吧....
for each t1, t2 combination in join buffer
如果这个地方把join_buffer_size 填充满了..
请问.也要建立临时表吗? myisam的?