【发布时间】:2019-05-30 02:33:30
【问题描述】:
编辑:
经过进一步调查,延迟似乎更多是 Django 而不是 Cloud SQL 代理。
我在视图的开头和结尾添加了几个打印语句,它们会在发出请求时立即打印,但页面加载需要另外 60 秒。
我已经剥离了模板文件以仅包含基本框架,删除了大多数脚本和静态资源,但它仍然非常相似。
改变我的观点以返回一个简单的HttpResponse('Done') 大大缩短了时间。
在本地开发时,我使用 Django 来提供 docs 中描述的静态文件。同样,我在其他项目中没有这个问题。
原帖:
我最近注意到在本地开发环境中使用 Cloud SQL 代理时,我的 Django 应用程序连接到我的 Google Cloud SQL 数据库的速度非常慢。
初始连接需要 2-3 分钟,之后每个请求需要 60 秒。这适用于执行迁移或运行开发服务器时。最终请求完成。
我尝试过扩展数据库但没有效果(无论如何它相对较小)。数据库版本为 MySQL 5.7,机器类型为 db-n1-standard-1。以前我使用过 Django Channels,但后来删除了对它的所有引用。
中间件和settings.py相对标准,与另一个即时连接的Django应用相同。
实时站点的连接速度也非常快,没有任何问题。
Python 版本是 3.6,带有 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 启动 Cloud 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 中有几个错误:
_mysql_exceptions.OperationalError: (2006, "Lost connection to MySQL server at 'reading initial communication packet', system error: 95")django.db.utils.OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 95")AttributeError: 'SessionStore' object has no attribute '_session_cache'
这些在不更改任何设置的情况下不时出现(或不出现)。
我已经读到它们可能是访问权限问题,但最终会建立连接,但速度非常慢。我正在通过 Google Cloud SDK 进行授权,这似乎工作正常。
【问题讨论】:
-
这可能是您本地网络连接的问题吗?您是在防火墙后面还是在使用 VPN?您可以从其他网络尝试吗?
-
我不能说。我不知道有任何限制会阻碍它,而且其他具有类似设置的项目似乎可以正常加载。
标签: python mysql django google-cloud-platform google-cloud-sql