V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zhangjiabin1010
V2EX  ›  Python

关于 Python 执行 Sql 语句速度慢的问题。

  •  
  •   zhangjiabin1010 · 2018-05-11 10:07:41 +08:00 · 2089 次点击
    这是一个创建于 2394 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在有一条多表联合查询 Sql 语句、在 PL/SQL 里执行,需要 100 秒。数据量大概是 9 万条。在 Python 里使用
    g8287694
        1
    g8287694  
       2018-05-11 10:12:19 +08:00
    和语言无关,和 sql 有关,为什么明明是 sql 的问题还说语言的问题?
    Lycnir
        2
    Lycnir  
       2018-05-11 10:18:13 +08:00
    python: 我不背锅
    whx20202
        3
    whx20202  
       2018-05-11 10:25:59 +08:00   ❤️ 1
    建议排查数据库的 slow log 看看数据库端执行时间多长
    1. postgresql 这种慢 SQL 日志,会把 python 进程和数据库中间,传数据的时间也包括在内,而你读了 9W 行,这个时间也很恐怖
    2. 有时候 SQLalchemy 序列化的性能很低很低,之前搞 OpenStack 性能优化的时候,APM 团队说,我们环境上 99%的时间都在序列化上,你可以考虑上一个 cprofile 看一下。
    3. 首先得在数据库端查看执行计划,我觉得你的 SQL 本身可能也有问题

    所以:
    1. 在数据库中查看执行计划,看看有没有做到读最少的 IO,返回最合适的内容
    2. 如果 SQL 没问题,可以考虑在数据库节点用命令行 导出结果,这个时间应该比你看到的慢 SQL 时间短,因为省去了路上的时间,和服务器解析的时间(尤其是用了 ORM 框架的情况下)
    3. 也可以考虑上 cprofile
    4. 9W 行真的需要吗,有没有可能在数据库里直接聚合一下?
    zhangjiabin1010
        4
    zhangjiabin1010  
    OP
       2018-05-11 10:36:51 +08:00
    @whx20202 先感谢解答,我按您的提示思路先去找找解决办法。刚才的问题没有编辑完,您可以看下我新发的帖子 https://www.v2ex.com/t/453985#reply1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:24 · PVG 23:24 · LAX 07:24 · JFK 10:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.