选择(相对)大型数据库表

时间:2015-03-19 17:14:56

标签: php mysql google-cloud-sql

我正在使用Google CloudSQL并拥有以下简单代码:

<?php
$db = new pdo ( 'mysql:unix_socket=/cloudsql/<appid:id>;dbname=<database_name>', 'root', '' );
$db->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $db->prepare ( "SELECT column1, column2, column3, column4, column5 FROM table" );
$stmt->execute ();
$returned = $stmt->fetchAll ( PDO::FETCH_ASSOC );
echo json_encode ( $returned );
?>

但由于数据库表太大(接近150,000行),似乎没有正确处理。我不断收到此错误消息:

Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds.

我知道问题的大小是因为只要我SELECT只有3列而不是5列,它就会很好地显示它。在我看来,150,000行不是要求太多;但它是我创造的最大的桌子,所以我不知道我错过了什么。

我该怎么办?

修改

我也尝试将层从D0(125 MB)升级到D1(512 MB),但这也没有帮助。

1 个答案:

答案 0 :(得分:1)

当您的App Engine实例类超出内存限制时,会出现此警告。我假设你在实例类'B1',因为150000行的数据超过了。您可以通过在app.yaml文件中设置其值来更改您的实例类。我建议通过this documentation选择一个适合您需求的实例类,任何高于B1和F1的东西都应该为您提供足够的内存。另外,请确保通过设置public SomeClass(int someInt, String someStr, String strTwo) { // Yes you can do this this(someInt, someStr); // calling the former constructor this.strTwo = strTwo; }

来关闭连接