编辑:
经过进一步调查后,延迟似乎比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通道,但此后删除了所有对此的引用。
中间件和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进行授权,看来效果很好。
答案 0 :(得分:0)
最终,我发现延迟的主要来源是在我的一种管理形式(延迟了初始启动)和上下文处理器(延迟了每次加载)中调用了一个递归函数。删除后,页面加载没有问题。不过,在将其部署到App Engine或使用测试/本地SQLite数据库时,它运行良好,这使调试工作变得更加困难。