我一直收到这个PHP错误:
致命错误:超出最长执行时间300秒
我已经尝试在php.ini(apache和cli)中设置我max_execution_time和我的max_input_time设置0,-1以及4000每个设置秒.
我仍然得到错误说:
致命错误:超出最长执行时间300秒
在我收到此消息之前,我的脚本运行超过300秒
我通过命令行运行脚本.
我也检查了我phpinfo(),看看php.ini我正在使用哪个.
更有趣的是我尝试将设置 max_execution_time和max_input_time设置设置为5秒,我的脚本将在5秒内运行,然后才得到:
致命错误:超出最长执行时间300秒
我正在编写一个不一定需要扩展能力的应用程序,因为它不会在开始时收集大量数据.(但是,如果我很幸运,我可能会在路上行驶.)
我将在同一个盒子上运行我的Web服务器和数据库(现在).
话虽如此,我正在寻找性能和效率.
我的应用程序的主要部分将是加载博客文章.使用RDBMS(MySQL)我将进行6次查询(其中2个查询是连接),只是为了加载一个博客文章页面.
select blog
select blog_album
select blog_tags
select blog_notes
select blog_comments (join with users)
select blog_author_participants (join with users)
Run Code Online (Sandbox Code Playgroud)
但是,使用MongoDB,我可以对6个表进行反规范化并将其展平为仅2个表/集合,并将我的查询最小化为可能只有一个查询,
users
blogs
->blog_album
->blog_tags
->blog_notes
->blog_comments
->blog_author_participants
Run Code Online (Sandbox Code Playgroud)
现在,使用MongoDB架构,将会有一些数据冗余.但是,硬盘空间比CPU /服务器便宜.
1.)这是一个使用MongoDB的好方案吗?
2.)在扩展到单个服务器之外时,您是否只在使用MongoDB时获益?
3.)使用MongoDB是否存在任何持久性风险?我听说在执行插入时可能会丢失数据 - 因为insert首先写入内存,然后写入数据库.
4.)这是否会阻止我在生产中使用MongoDB?
在处理mongodb时,我应该何时在查询中使用{safe:true}?
现在我使用'safe'选项来检查我的查询是否已成功插入或更新.但是,我觉得这可能是过度杀戮.
我应该假设99%的时间,我的查询(假设它们写得正确)将被插入/更新,而不必担心检查它们是否成功输入?
想法?
我正在尝试导出环境变量,以便可以在父 shell MakeFile 中访问它们:
export-vars:
# extract vars from text file - remove comments - export output
export $$(cat env.txt | grep -v ^# | xargs)
Run Code Online (Sandbox Code Playgroud)
然后当我跑步时:
$ make export-vars
$ echo $SOME_VAR_EXPORTED_FROM_MAKEFILE
Run Code Online (Sandbox Code Playgroud)
我期望文本中的变量被设置为环境变量。
如何在目标/规则内执行此操作有任何帮助吗?
我有时会收到 mysql 死锁错误说:
'尝试获取锁时发现死锁;尝试重新启动事务'
我有一个队列表,其中多个 php 进程同时运行,从表中选择行。但是,对于每个进程,我希望它每次提取都抓取一组唯一的行,因此我没有选择任何重叠的行。
所以我运行这个查询:(这是我得到死锁错误的查询)
$this->db->query("START TRANSACTION;");
$sql = " SELECT mailer_queue_id
FROM mailer_queues
WHERE process_id IS NULL
LIMIT 250
FOR UPDATE;";
...
$sql = "UPDATE mailer_queues
SET process_id = 33044,
status = 'COMPLETED'
WHERE mailer_queue_id
IN (1,2,3...);";
...
if($this->db->affected_rows() > 0) {
$this->db->query("COMMIT;");
} else{
$this->db->query("ROLLBACK;");
}
Run Code Online (Sandbox Code Playgroud)
我也是:
同时向表中插入行(没有事务/锁)
同时更新表中的行(没有事务/锁)
同时从表中删除行(没有事务/锁)
同样,我的更新和删除只更新和删除它们分配有 process_id 的行......以及我执行“SELECT rows ... FOR UPDATE”事务的地方 process_id = null。理论上,它们永远不应该重叠。
我想知道是否有适当的方法来避免这些死锁?
是否会发生死锁,因为一个事务在选择/更新时锁定表的时间过长,而另一个进程正在尝试执行相同的事务并且只是超时?
任何帮助深表感谢