编辑:
在做了进一步的调查之后,延迟似乎比云sql代理更为严重。
我在视图的开头和结尾添加了几个print语句,当请求发出时它们会立即打印,但是页面加载还需要60秒。
我剥离了模板文件,只包含了基本内容,删除了大部分脚本和静态资源,但仍然非常相似。
更改视图以返回一个简单的 HttpResponse('Done')
大大缩短了时间。
在本地开发时,我使用django来提供文档中描述的静态文件。再说一次,我对其他项目没有这个问题。
原职务:
我最近注意到,在本地开发环境中使用cloudsql代理时,我的django应用程序连接到googlecloudsql数据库的速度非常慢。
初始连接需要2-3分钟,然后每次请求需要60秒。这适用于执行迁移或运行开发服务器时。最终请求完成。
我尝试过扩展数据库,但没有效果(反正它相对较小)。数据库版本为mysql 5.7,机器类型为db-n1-standard-1。以前我使用过django频道,但后来删除了对它的所有引用。
中间件和 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
.
在通过命令行调用代理之后,我看到 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'
在不改变任何设置的情况下,它们会不时出现或不出现。
我读到他们可能是一个访问权的问题,但最终的连接,它只是难以置信的缓慢。我是通过googlecloudsdk授权的,它看起来很好用。
1条答案
按热度按时间2j4z5cfb1#
最终我发现延迟的主要来源是一个递归函数,它在我的一个管理窗体(延迟了初始启动)和上下文处理器(延迟了每个加载)中被调用。删除后,页面将无问题加载。但是,当部署到appengine或使用测试/本地sqlite数据库时,它工作得很好,这使得调试变得更加困难。