我确实为多个客户端运行了多个 mysql 服务器,我过去常常看到一个常见问题。当我对大型数据库运行一些大型查询时,例如:
我有一个带有多个全文索引的 MyISAM 表,大约有 870 万条记录,如果我搜索非索引列,mysql 服务将变得无响应,直到结果出来(这可能需要 30 分钟)。
如何避免导致 mysql 服务无响应?例如,在任何操作系统中,您都可以设置进程优先级,以确保每个进程都获得一些资源来运行,如何在 mysql 中做到这一点?
答案1
您的问题有多种解决方案。您可以尝试调整设置(允许 mysql 使用更多内存,确保它不会交换,添加索引)或更改硬件(更多内存,更快的磁盘)。
另一个选择是设置一个 mysql 从属服务器来运行大量读取查询,这样,您仍然可以使用读写查询更新主服务器,同时从属服务器计算您需要的结果。
答案2
您应该为搜索涉及的每个列创建索引。当您在没有索引的列中进行搜索时,搜索将通过“filesort”进行,这对于 FTS 来说效率不高。
答案3
您不应该在主服务器上运行大量读取查询,尤其是在生产环境中。请进行复制或 MySQL 集群设置并将查询路由到非写入节点。