小编Roh*_*wad的帖子

如何防止应用程序中发生死锁?

我正在 PHP 框架(Codeigniter 2.1.0)中开发 LMS 应用程序。我正在使用 MySQL 数据库。数据库中的所有表都有innodb引擎。我还在每个表上创建了索引。现在我正在本地使用 Jmeter 2.9 版同时对 200 个用户进行负载测试。在负载测试期间,在特定页面操作中,我遇到了Deadlock Found错误。我将原始查询更改为新查询,但再次发生相同的错误。

我已经编写了 save_interactions 函数,它需要四个参数交互数组、module_id、course_id、user_id & 被 AJAX 脚本调用了很多次。如果特定的interaction_id 不存在于该表中,则以下脚本将插入记录,否则更新查询将被触发。

public function save_interactions($interaction_array,$modid,$cid,$uid)
{
    foreach($interaction_array as $key=>$interact_value)
    {
        $select_query = $this->db->query("SELECT COUNT(*) AS total FROM `scorm_interactions` WHERE `mod_id`='".$modid."' AND `course_id`='".$cid."' AND `user_id`='".$uid."' AND `interaction_id`='".$interact_value[0]."'");
        $fetchRow = $select_query->row_array();

        if($fetchRow['total']==1)
        {
            $update_data = array(
                        "interaction_type"=>$interact_value[1],
                        "time"=>$interact_value[2],
                        "weighting"=>$interact_value[3],
                        "correct_response"=>$interact_value[4],
                        "learner_response"=>$interact_value[5],
                        "result"=>$interact_value[6],
                        "latency"=>$interact_value[7],
                        "objectives"=>$interact_value[8],
                        "description"=>$interact_value[9]
            );
            $this->db->where('mod_id', $modid);
            $this->db->where('course_id', $cid);
            $this->db->where('user_id', $uid);
            $this->db->where('interaction_id', $interact_value[0]);
            $this->db->update('scorm_interactions', $update_data);
        }else
        {
            $insert_data = …
Run Code Online (Sandbox Code Playgroud)

mysql innodb deadlock

6
推荐指数
1
解决办法
9015
查看次数

标签 统计

deadlock ×1

innodb ×1

mysql ×1