python - Google Cloud SQL w/Django - 连接速度极慢

标签 python mysql django google-cloud-platform google-cloud-sql

编辑:

经过进一步调查后,延迟似乎更多是 Django 造成的,而不是 Cloud SQL 代理造成的。

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

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

更改我的 View 以返回简单的 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 进行授权,这似乎工作正常。

最佳答案

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

关于python - Google Cloud SQL w/Django - 连接速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54023373/

相关文章:

mysql - 插入 ... 在重复 key 更新时 [IF]

django - 如何在 Django 单元测试中只加载一次固定装置?

python - Zlib 无法解压 python 2.7

Python:如何定义可由多处理池从命令行参数访问的全局变量?

mysql - 使用特定格式的字段进行查询

python - Django 管理员。 UnicodeEncodeError 'ascii' 编解码器无法对位置 0-3 : ordinal not in range(128) 中的字符进行编码

javascript - 在 Angular/Django SPA 中存储 ng-templates 的最佳位置是什么

python - 相当于 pandas read_clipboard 的 NumPy?

python - 如何存储CNN的展平结果?

mysql - MySql SSl 连接问题