Google 云 SQL w/ Django - 极慢的连接

Google Cloud SQL w/ Django - Extremely Slow Connection

编辑:

经过进一步调查,Django 的延迟似乎比云 SQL 代理更多。

我在视图的开头和结尾添加了几个打印语句,它们会在发出请求时立即打印,但页面加载还需要 60 秒。

我已经剥离了模板文件以仅包含骨架,删除了大部分脚本和静态资源,但它仍然非常相似。

将我的观点更改为 return 一个简单的 HttpResponse('Done') 大大缩短了时间。

在本地开发时,我使用 Django 来提供静态文件,如 docs 中所述。同样,我在其他项目中没有这个问题。

原Post:

我最近注意到在我的本地开发环境中使用云 SQL 代理时,我的 Django 应用程序连接到我的 Google 云 SQL 数据库的速度非常慢。

初始连接需要 2-3 分钟,之后每个请求需要 60 秒。这适用于执行迁移或 运行 开发服务器。最终请求完成。

我试过扩展数据库但没有效果(反正它相对较小)。数据库版本为 MySQL 5.7,机器类型为 db-n1-standard-1。以前我使用过 Django Channels,但后来删除了所有对此的引用。

中间件和 settings.py 相对标准,与另一个即时连接的 Django 应用相同。

实时站点连接速度也非常快,没有任何问题。

Python 版本是 3.6 w/ Django 2.1.4 和 mysqlclient 1.3.14。

我的数据库设置定义为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.getenv('DB_NAME'),
        'USER': os.getenv('DB_USER'),
        'PASSWORD': os.getenv('DB_PASSWORD'),
        'PORT': '3306',
    }
}

DATABASES['default']['HOST'] = os.getenv('DB_HOST')
if os.getenv('GAE_INSTANCE'):
    pass
else:
    DATABASES['default']['HOST'] = '127.0.0.1'

是否使用环境变量似乎没有什么区别。

我正在通过 ./cloud_sql_proxy -instances="my-project:europe-west1:my-project-instance"=tcp:3306.

启动云 SQL 代理

通过命令行调用代理后,我看到 Ready for new connections。 运行 python manage.py runserver 显示 New connection for "my-project:europe-west1:my-project-instance" 但在我看到 Starting development server at http://127.0.0.1:8000/.

之前需要一个年龄

我还注意到 Stackdriver 中的几个错误:

在不更改任何设置的情况下,这些会不时出现或不出现。

我读到它们可能是访问权限问题,但最终还是建立了连接,只是速度非常慢。我正在通过 Google Cloud SDK 授权,它似乎工作正常。

最终我发现延迟的主要原因是在我的一个管理表单(它延迟了初始启动)和上下文处理器(它延迟了每次加载)中调用了一个递归函数。删除它后,页面加载没有问题。不过,当部署到 App Engine 或使用 test/local SQLite 数据库时,它运行良好,这使得调试变得有点困难。