Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Drupal数据库性能调优-将特定表从MyISAM切换到InnoDB_Php_Mysql_Performance_Drupal_Innodb - Fatal编程技术网

Php Drupal数据库性能调优-将特定表从MyISAM切换到InnoDB

Php Drupal数据库性能调优-将特定表从MyISAM切换到InnoDB,php,mysql,performance,drupal,innodb,Php,Mysql,Performance,Drupal,Innodb,我有一个drupal站点,流量很低,但是有大量的新内容被自定义提要导入模块添加。此模块为导入的项目创建节点和关联的分类 目前,我相信我们所有的drupal表都是MyISAM。我正在考虑切换重写表: 节点 看门狗 会议 访问日志 你会考虑其他什么表格? 给InnoDB 你认为这是个好主意吗?我是否可能看到绩效提升?我之所以将此视为整体解决方案的一部分,是因为在导入时,mysqld经常会耗尽内存,导致整个系统停机。它只在导入时发生 我最终会看到这样的事情: xml import at [01/Jun

我有一个drupal站点,流量很低,但是有大量的新内容被自定义提要导入模块添加。此模块为导入的项目创建节点和关联的分类

目前,我相信我们所有的drupal表都是MyISAM。我正在考虑切换重写表:

  • 节点
  • 看门狗
  • 会议
  • 访问日志
  • 你会考虑其他什么表格? 给InnoDB

    你认为这是个好主意吗?我是否可能看到绩效提升?我之所以将此视为整体解决方案的一部分,是因为在导入时,mysqld经常会耗尽内存,导致整个系统停机。它只在导入时发生

    我最终会看到这样的事情:

    xml import at [01/Jun/2011:13:26:38 -0400] "GET /import/xml_import HTTP/1.1" 200
    ....
    14:02:38 [ERROR] /usr/libexec/mysqld: Out of memory (Needed 1049152 bytes)
    
    这个盒子是x32,所以我们只能分配给mySql的内存量。我们也有PHP,JAVA,SVN和更多在这个盒子上运行。。。按原样征税。呵呵

    因此,如果您对db的性能调整有任何意见,我将不胜感激,我现在正在进行研究

    蒂亚

    编辑:(我已经包括了我当前的my.cnf):

    [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock tmpdir=/var/lib/mysql/tmp #旧密码=1 跳锁 键缓冲=2048M#从1024倍增加一倍 允许的最大数据包数=16M 表_缓存=5000 排序缓冲区大小=1M 读取缓冲区大小=1M 读取缓冲区大小=8M myisam\排序\缓冲区\大小=64M 线程缓存大小=64#比32倍 线程并发性=8 查询缓存大小=1024M#比512倍 tmp_表_尺寸=1024M 最大堆表大小=1024M 反向对数=100 最大连接错误=10000 连接缓冲区大小=1M 打开文件=20000 交互超时=600 等待\u超时=600 ft\u min\u word\u len=3 ft_stopword_文件=“” 最大连接数=1000 #innodb_data_file_path=ibdata1:2000M;ibdata2:10M:自动扩展 #innodb日志文件大小=100M #innodb_缓冲区_池_大小=384M #innodb_附加_成员_池大小=20M #日志慢速查询=/var/lib/mysqllogs/slow log #长查询时间=2 #不使用索引的日志查询 #log bin=/var/lib/mysqllogs/bin log #日志从属更新 #过期天数=14天 服务器id=1 [mysql.server] user=mysql #basedir=/var/lib [mysqld_safe] err log=/var/log/mysqld.log pid文件=/var/run/mysqld/mysqld.pid 打开\u文件\u限制=65536
    一般来说,InnoDB比MyISAM慢,因为InnoDB是原子的,而MyISAM不是。通过权衡性能,您可以获得数据可靠性

    如果可以,在导入之前禁用索引,您将看到性能提高。一次重建所有索引比每次插入都更有效


    您不希望将mysql配置为超出可用内存。内存设置分布在多个设置中。您可以使用类似的方法来确定mysql安装的优化程度。

    一般来说,InnoDB比MyISAM慢,因为InnoDB是原子的,而MyISAM不是。通过权衡性能,您可以获得数据可靠性

    如果可以,在导入之前禁用索引,您将看到性能提高。一次重建所有索引比每次插入都更有效

    您不希望将mysql配置为超出可用内存。内存设置分布在多个设置中。您可以使用类似的方法来确定mysql安装的优化程度。

    但是,如果这种模式改变了,你的流量又增加了

    原因#1:InnoDB执行行级锁定。对于MyISAM,执行任何INSERT、UPDATE或DELETE查询都将导致完全表锁定。即使在低流量的网站中,也可能存在两个或多个DB连接锁定同一个表的情况。有了InnoDB,这种可能性就完全消除了

    原因2:

    键缓存(大小由键缓冲区大小决定)保存MyISAM表的索引页。总是有磁盘I/O从MyISAM读取数据。第一次读取的记录将缓存用于在键缓存中查找行的索引页。后续的查找将在密钥缓存中找到所需的密钥,但始终需要强制磁盘I/O来获取数据。对于InnoDB,数据页和索引页都位于InnoDB缓冲池中(大小由InnoDB_Buffer_Pool_size决定)。所有缓存在缓冲池中的内容都大大减少了磁盘I/O

    我一直建议Drupal数据库使用InnoDB而不是MyISAM

    在此之前,MyISAM是您所需要的全部火力。

    但是,如果这种模式改变了,你的流量又增加了

    原因#1:InnoDB执行行级锁定。对于MyISAM,执行任何INSERT、UPDATE或DELETE查询都将导致完全表锁定。即使在低流量的网站中,也可能存在两个或多个DB连接锁定同一个表的情况。有了InnoDB,这种可能性就完全消除了

    原因2:

    键缓存(大小由键缓冲区大小决定)保存MyISAM表的索引页。总是有磁盘I/O从MyISAM读取数据。第一次读取的记录将缓存用于在键缓存中查找行的索引页。后续的查找将在密钥缓存中找到所需的密钥,但始终需要强制磁盘I/O来获取数据。对于InnoDB,数据页和索引页都位于InnoDB缓冲池中(大小由InnoDB_Buffer_Pool_size决定)。所有缓存在缓冲池中的内容都大大减少了磁盘I/O

    我一直建议Drupal数据库使用InnoDB而不是MyISAM


    在那之前,MyISAM是你所需要的全部火力,。

    这种笼统的说法是不正确的。经过正确调整,InnoDB可以在具有许多写操作的表上表现得更好,例如,由于行级锁定。这也是我的理解,这就是为什么我建议在重写表上使用InnoDB的原因。我将签出mysqltu [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock tmpdir=/var/lib/mysql/tmp #old_passwords=1 skip-locking key_buffer = 2048M #doubled from 1024 max_allowed_packet = 16M table_cache = 5000 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 8M myisam_sort_buffer_size = 64M thread_cache_size = 64 #doubled from 32 thread_concurrency = 8 query_cache_size = 1024M #doubled from 512 tmp_table_size=1024M max_heap_table_size=1024M back_log = 100 max_connect_errors = 10000 join_buffer_size=1M open-files = 20000 interactive_timeout = 600 wait_timeout = 600 ft_min_word_len=3 ft_stopword_file='' max_connections=1000 #innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend #innodb_log_file_size = 100M #innodb_buffer_pool_size = 384M #innodb_additional_mem_pool_size = 20M #log-slow-queries=/var/lib/mysqllogs/slow-log #long_query_time=2 #log-queries-not-using-indexes #log-bin=/var/lib/mysqllogs/bin-log #log-slave-updates #expire_logs_days = 14 server-id = 1 [mysql.server] user=mysql #basedir=/var/lib [mysqld_safe] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid open_files_limit=65536