MySQL永无止境';复制到tmp表';使用db视图和左连接
我有MySQL的性能问题。数据库包含大约400000条记录,站点运行在Drupal上,所有ColluMN都有索引。不幸的是,有些广告没有所有的数据,所以我需要使用左连接而不是内部连接 视图: 我的数据库配置:MySQL永无止境';复制到tmp表';使用db视图和左连接,mysql,sql,join,view,left-join,Mysql,Sql,Join,View,Left Join,我有MySQL的性能问题。数据库包含大约400000条记录,站点运行在Drupal上,所有ColluMN都有索引。不幸的是,有些广告没有所有的数据,所以我需要使用左连接而不是内部连接 视图: 我的数据库配置: max_connections = 300 connect_timeout = 100 max_user_connections = 300 key_buffer = 256M query_cache_size = 96MB query_cache_limit = 4MB table_ca
max_connections = 300
connect_timeout = 100
max_user_connections = 300
key_buffer = 256M
query_cache_size = 96MB
query_cache_limit = 4MB
table_cache = 1800
table_definition_cache = 1800
sort_buffer_size = 32M
myisam_sort_buffer_size = 32M
tmp_table_size = 64MB
join_buffer_size = 4M
wait_timeout = 60
innodb_buffer_pool_size = 2G
innodb_log_file_size = 1G
max_heap_table_size = 128M
tmp_table_size = 128M
max_allowed_packet = 32M
thread_cache_size = 128
在我启动mysql服务器站点后,搜索速度很快,但几个小时后,“复制到tmp表”开始复制越来越多的数据,serwer变得越来越慢,最终崩溃。
系统具有8GB的RAM及其双核
请帮忙 我认为在这种特殊情况下,首先查找要选择的行的ID,然后添加其他表可能会更快。玩一玩
select <fields>
from node n
<joins>
where nid in
( select nid
from node
where n.status = 1
and n.type = 'advertisement
)
您也可以尝试解释一下,看看哪里慢。尝试增加连接缓冲区大小。在我看来,你的ram不够。一旦innodb_缓冲池满了,您可能会遇到问题。实际上,您可以将innodb_buffer_大小设置为总大小的80%,因此6在这种情况下,请确保将日志文件的大小增加到innodb_buffer_pool_大小的至少25%。所以最小2GB。它也可以是查询缓存。如果这是一个大的,它需要时间的服务去通过查奇。尝试完全禁用它或将其设置为非常低。顺便说一句,这些表是否得到了大量更新?。您能从select查询中也提供一个解释吗?我在google文档上发布了查询解释,以使其更具可读性:在(v.field\u adpersonname\u值,如'Sample name%'ESCAPE'\')和(v.field\u adpersonfamilyname\u值,如''%ESCAPE'\')和(v.field\u adpersondateofborn\u值,如“%”ESCAPE“\\”)和(v.field\u adpersondateOfDid\u值,如“%”ESCAPE“\\”)?我已经解决了tempfs的问题,但我想你明白了,我也会尝试一下。谢谢。
max_connections = 300
connect_timeout = 100
max_user_connections = 300
key_buffer = 256M
query_cache_size = 96MB
query_cache_limit = 4MB
table_cache = 1800
table_definition_cache = 1800
sort_buffer_size = 32M
myisam_sort_buffer_size = 32M
tmp_table_size = 64MB
join_buffer_size = 4M
wait_timeout = 60
innodb_buffer_pool_size = 2G
innodb_log_file_size = 1G
max_heap_table_size = 128M
tmp_table_size = 128M
max_allowed_packet = 32M
thread_cache_size = 128
select <fields>
from node n
<joins>
where nid in
( select nid
from node
where n.status = 1
and n.type = 'advertisement
)
select n.fields,
(select field_adpersonid_value from field_data_field_adpersonid i ON i.entity_id = n.nid) as field_adpersonid_value
from node n
where .. etc