我正在开发一个涉及大量数据库写入的应用程序,大约 70% 的插入和 30% 的读取。这个比率还包括我认为是一次读取和一次写入的更新。通过插入语句,多个客户端通过下面的插入语句在数据库中插入数据:
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
Run Code Online (Sandbox Code Playgroud)
问题是我应该使用insert_delay还是使用mysqli_multi_query机制,因为 insert 语句在服务器上使用 ~100% cpu。我在我的数据库上使用 InnoDB 引擎,所以插入延迟是不可能的。服务器上的插入是 ~36k/hr 和 99.89% 读取,我也在使用 select 语句在单个查询中检索数据七次,这个查询在服务器上执行需要 150 秒。我可以使用什么样的技术或机制来完成这项任务?我的服务器内存是 2 GB,我应该扩展内存吗?。看看这个问题,任何建议将不胜感激。
表的结构:
+-----------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(100) | NO | | NULL | …
Run Code Online (Sandbox Code Playgroud) 我在我的 linode 服务器上运行一个应用程序 PHPlist,同时运行 12 个 PHP 脚本,每个脚本打开一个 MySQL 连接。现在,当我访问 PHPlist 时,它经常显示此错误:
致命错误:抱歉,服务器当前太忙,请稍后再试。
当我尝试访问 phpMyAdmin 时,它显示 #1040 错误。我通过cron
作业运行的 PHP 脚本的输出显示:
PHP 警告:mysqli_connect():(HY000/1040):连接过多
我在带有 phpMyAdmin 的服务器上使用 LAMP 堆栈;top
终端中的输出显示mysqld
使用 100-130% CPU。当我试图解决这个问题时,我得到了一些线索:
有很多变量要设置,但我无法确定具体是哪些变量,我从以下方面获得了一些参考: 连接过多 和http://dev.mysql.com/doc/refman/5.5/en/table-cache。 html
但是根据我的使用情况如何增加内存以及对我来说最大的内存困难是多少。
在我的服务器上,我使用了大约 12 个 PHP 脚本、用于发送电子邮件的 PHPlist 应用程序以及用于用户注册的主要数据库。
请帮我解决这个问题。
我的表结构:
+-----------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(100) | NO | | NULL | |
| uniq_name | varchar(100) | NO | | NULL | |
| info_name | varchar(100) | NO | | NULL | |
| delay_time | int(11) | NO | | NULL | |
| track_time | timestamp | NO | …
Run Code Online (Sandbox Code Playgroud)