mysql数据库中记录超过5万的时候查询很慢,会报内存溢出

一骑江山 发布于 2014/04/17 09:44
阅读 2K+
收藏 0
mysql数据库中记录超过5万的时候查询很慢,会报内存溢出,有什么好的解决方法吗?
加载中
0
红薯
红薯

内存溢出是你的程序问题,不是 MySQL 问题吧? 你一次性读太多了,建议加大应用的内存

0
xiaomu2013
xiaomu2013

1、加大服务器的内存

2、分页查询

0
0-1
0-1

sql或代码段和表结构贴出来,一般先做sql和程序上的优化,然后才是Mysql性能参数设置,系统环境,硬件配置。

0
V神
V神

缓存机制,经常要读取的数据 制定缓存策略

0
蟋蟀哥哥
蟋蟀哥哥

怀疑是服务器配置太低,或者my.conf的配置有问题。。

0
一骑江山
一骑江山

引用来自“guyson”的评论

sql或代码段和表结构贴出来,一般先做sql和程序上的优化,然后才是Mysql性能参数设置,系统环境,硬件配置。

protected void innerProcess(CrawlURI curi){
...
...
...
    Project p = crawler.getProjectByURI(curi);
        if (p!=null) {            
            crawler.downloadProjectPage(curi,p);
            logger.info("Processed p# " +p.getId()+ " " +p.getName());
            }
...
...
...
}
//通过url从数据库中获取project
public Project getProjectByURI(CrawlURI curi) throws Exception {
        String hql = "from Project p where p.url = ?";
        List<Project> list = (List<Project>) hs.doHQL(hql, curi.toString(),
                false);
        if (list != null && list.size() > 0) {
            logger.info(list.get(0));
            return list.get(0);
        }

        return null;
    }
//查询语句处理
public List<?> doHQL(String hql, String value, boolean lockForUpdate) throws Exception {
            List<?> results = null;
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            Query query = session.createQuery(hql).setString(0,value);
            if (lockForUpdate) {
                query.setLockMode("foo", LockMode.PESSIMISTIC_WRITE);
            }
            results = query.list();
            tx.commit();
            session.close();
            return results;
    }

//通过url取html
public boolean downloadProjectPage(CrawlURI curi, Project p)
            throws Exception {
        String html = "";
        html = curi.getHttpRecorder().getReplayCharSequence().toString();
        if (html != null) {
            p.setHtml(html);
            p.setTimestamp(new Date());
            hs.updateTuple(p);
        }

public <T> boolean updateTuple(T tuple) throws Exception {

        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.update(tuple);
        tx.commit();
        session.close();        
        return true;

    }

0
一骑江山
一骑江山
一骑江山
navicat
红星xx
红星xx
你这是 什么工具
0
一骑江山
一骑江山

下面两张图是表结构和设置,非常感谢!

返回顶部
顶部