[英]How to connect to an Amazon MySQL RDS instance via PHP over SSL
[英]mySQL RDS instance performance on Amazon Webservice
我是亚马逊网络服务的新手,并且已经设置了mySQL RDS实例。
我当前正在使用db.t2.micro服务器,并设置了一个循环,该循环将1000条记录插入数据库。 从代码中可以看到,此操作大约需要16秒钟。
如果我打算降低速度以在1秒内完成1000次插入,那么我需要针对什么规格进行更改才能实现这一目标?
<?php
$time = time();
// connection crednetials
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$i = 0;
while($i < 1000){
$sql = "INSERT INTO test (value)
VALUES ('$i')";
if ($conn->query($sql) === TRUE) {
// echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$i++;
}
$conn->close();
$time2 = time();
$diff = $time2 - $time;
echo "Difference: ".$diff;
?>
谢谢!
我推荐几种方法:
1-您可以分批插入吗? 执行有开销,因此,如果一次可以执行50、100,则将大大减少开销,从而减少运行时间。
2-如果这样做没有帮助,我会考虑增加服务器的IOP。
但我强烈建议使用(1)作为解决方案。
如果您使用试用版t2.micro并预留20GB的存储空间,则会遇到一些问题
最大IOPS = 20GB x 3 = 60 IOPS,对于1k记录,1000/60 = 16.6秒因此,要获得1000 iops,您可以利用每GB 3 IOPS的gp2优势,分配330GB = 333 x 3 = 999 IOPS。 此后,您将面临数据传输限制。 不过,您可以编写和调用MYSQL存储过程来模拟RDS中的原始插入,以证明IO性能。
Mysql甚至仍使用一些CPU来进行简单的记录插入。 t2。*实例类型只是为您提供了仅持续30分钟的连续突发处理,之后它将限制在CPU的25%以下。 如果您有那么多交易,请尝试使用c3 / c4 / m3 / m4等。
尽管AWS文档中有关于Amazon RDS的存储的信息 ,但其他因素可能会起作用,例如,如果Web服务器和RDS不在同一个地方,则它们之间的网络延迟。
因此,基准RDS的最佳方法是将基准存储过程放入MYSQL RDS中,并按此问题答案所示对其进行调用。 网络延迟为零,可以满足您的原始基准测试需求。
这是从提到的问题中复制的代码
DELIMITER $$
CREATE PROCEDURE InsertRand(IN NumRows INT, IN MinVal INT, IN MaxVal INT)
BEGIN
DECLARE i INT;
SET i = 1;
START TRANSACTION;
WHILE i <= NumRows DO
INSERT INTO rand_numbers VALUES (MinVal + CEIL(RAND() * (MaxVal - MinVal)));
SET i = i + 1;
END WHILE;
COMMIT;
END$$
DELIMITER ;
CALL InsertRand(1111, 2222, 5555);
(更新):
批量插入不适用于基于交易的应用程序。 使用各种MySQL Insert Performance技术进行优化很重要。 不幸的是,诸如LOAD DATA INFILE
技术不适用于RDS。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.