java吧 关注:1,300,614贴子:12,846,932
  • 17回复贴,共1

大神们,求支援啊,遇到个问题过不去啊

只看楼主收藏回复

问题是这样的,一个定时调度,需要从数据库查询数据,但是要查询的表是一张非常大的表,记录上亿条,直接把sql放到plsql客户端上手动查询需要20分钟左右,才能出结果,sql很简单,数据库有索引,所以查询时间无法优化,程序跑起来后每到这里就过不去了,一把在查询到10分钟左右就报这个异常
org.springframework.jdbc.UncategorizedSQLException:
### Error querying database. Cause: java.sql.SQLException: 关闭的语句: getMetaData
### The error may exist in file [F:\works\target\classes\static\mybatis\xml\Tables.xml]
### The error may involve com.ultrasoft.satellite.dao.TablesMapper.selectOrderDateBySql
### The error occurred while handling results
### SQL: select l.filename "fileName", to_char(l.logdate, 'yyyy-MM-dd hh:mm:ss') "logDate", l.logcontent "logContent" from (select ROW_NUMBER() OVER(PARTITION BY c.filename ORDER BY c.logdate DESC) rn, c.* from arss.combussinessrunninglog c where c.filename in (select a.filename from arss.arcarchivestatus a where a.filenamedate >= to_date('2018-06-01', 'yyyy-MM-dd') and a.filenamedate < to_date('2018-07-01', 'yyyy-MM-dd') and exists (select t.filenamecode from arss.COMPRODUCTIONDEF t where t.filenamecode = a.productioncode and t.filenamecode in ('FY4A-_AGRI--_N_DISK_1047E_L0-_GRD-_MULT_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_00001_AFNYYYYMMDDhhmmss.DAT','FY4A-_AGRI--_N_DISK_1047E_L0A_PRM-_MULT_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_00001_AFNYYYYMMDDhhmmss.DAT','FY4A-_AGRI--_N_REGC_1047E_L1-_HRIT_C011_NOM_YYYYMMDDhhmmss_YYYYMMDDhhmmss_4000M_Skkll.DAT','FY4A-_AGRI--_N_REGC_1047E_L1-_HRIT_C012_NOM_YYYYMMDDhhmmss_YYYYMMDDhhmmss_4000M_Skkll.DAT','FY4A-_LMI---_N_REGX_1047E_L1B_ORI-_SING_NUL_YYYYMMDDHHMMSS_yyyymmddhhmmss_7800M_NmmVk.HDF') ) and (a.DATAGETFLAG = -2 or a.METADATAGETFLAG = -2 or a.DATAQUALITYFLAG = -2))) l where l.rn = 1 order by l.filename, l.updated desc
### Cause: java.sql.SQLException: 关闭的语句: getMetaData
; uncategorized SQLException for SQL []; SQL state [null]; error code [17009]; 关闭的语句: getMetaData; nested exception is java.sql.SQLException: 关闭的语句: getMetaData
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
at com.sun.proxy.$Proxy71.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:231)


IP属地:湖北1楼2018-07-23 15:31回复
    用的是springboot,我感觉是数据源配置的问题,程序等待数据库数据返回应该有个默认时间;
    spring.datasource.ARSDB.connection-timeout=1800000
    指定连接的超时时间,毫秒单位.
    设置这个30分钟,没作用,这个应该是连接数据库的超时时间,我的这个已经连接到数据库了


    IP属地:湖北2楼2018-07-23 15:39
    回复
      2026-03-31 05:53:45
      广告
      不感兴趣
      开通SVIP免广告
      数据库的响应超时时间如何设置啊,求解


      IP属地:湖北3楼2018-07-23 15:41
      回复
        查询20分钟肯定语录有问题


        IP属地:江苏来自Android客户端4楼2018-07-23 15:43
        收起回复
          目测出在exists


          IP属地:江苏来自Android客户端5楼2018-07-23 15:44
          回复(1)
            让我来测试一下这个行不行
            #指定连接池中连接的最大年龄
            spring.datasource.ARSDB.max-age=1800000
            有木有人指导一下啊


            IP属地:湖北6楼2018-07-23 15:47
            回复
              上亿数据不搞分区分表是真的作死啊


              IP属地:辽宁来自Android客户端7楼2018-07-23 22:31
              回复
                而且上亿数据真的需要这么长时间吗?


                IP属地:辽宁来自Android客户端8楼2018-07-23 22:31
                回复
                  2026-03-31 05:47:45
                  广告
                  不感兴趣
                  开通SVIP免广告
                  上亿的数据!你还各种嵌套,排序!能不GG吗?既然是定时任务,那就用程序去实现部分sql的功能!


                  IP属地:湖南来自Android客户端9楼2018-07-23 22:39
                  回复(1)
                    听取老哥们的意见然后sql:
                    select a.filename
                    from arss.arcarchivestatus a
                    where a.filenamedate >= to_date('2018-04-01', 'yyyy-MM-dd')
                    and a.filenamedate < to_date('2018-05-01', 'yyyy-MM-dd')
                    and a.filenamecode in
                    ('FY4A-_AGRI--_N_DISK_1047E_L0-_GRD-_MULT_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_00001_AFNYYYYMMDDhhmmss.DAT',
                    'FY4A-_AGRI--_N_STAR_1047E_L0-_NGD-_MULT_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_0000N_ASSYYYYMMDDhhmmss.DAT',
                    'FY4A-_GIIRS-_N_REGX_1047E_L0-_GRD-_IRA-_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_0000N_GRSYYYYMMDDhhmmss.DAT',
                    'FY4A-_AGRI--_N_REGC_1047E_L0A_PRM-_MULT_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_00001_ACNYYYYMMDDhhmmss.DAT',
                    'FY4A-_GIIRS-_N_REGX_1047E_L0-_GRD-_VIS-_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_0000N_GRSYYYYMMDDhhmmss.DAT',
                    'FY4A-_GIIRS-_N_REGX_1047E_L0-_AUX-_IRA-_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_NNNNN_GRSYYYYMMDDhhmmss.DAT',
                    'FY4A-_LMI---_N_REGX_1047E_L0-_GRD-_SING_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_0000N_LLVYYYYMMDDhhmmss.DAT',
                    'FY4A-_AGRI--_N_DISK_1047E_L0A_PRM-_MULT_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_00001_AFNYYYYMMDDhhmmss.DAT',
                    'FY4A-_LMI---_N_LAMA_1047E_L0-_GRD-_SING_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_00001_LMVYYYYMMDDhhmmss.DAT',
                    'FY4A-_AGRI--_N_REGC_1047E_L1-_HRIT_C008_NOM_YYYYMMDDhhmmss_YYYYMMDDhhmmss_4000M_Skkll.DAT',
                    'FY4A-_GIIRS-_N_REG1_1047E_L0-_AUX-_IRB-_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_00001_GRSYYYYMMDDhhmmss.DAT',
                    'FY4A-_GIIRS-_N_REGX_1047E_L0-_AUX-_VIS-_NUL_YYYYMMDDhhmmss_YYYYMMDDhhmmss_00000_NNNNN_GRSYYYYMMDDhhmmss.DAT')
                    and (a.DATAGETFLAG = -2 or a.METADATAGETFLAG = -2 or
                    a.DATAQUALITYFLAG = -2)


                    IP属地:湖北10楼2018-07-24 17:55
                    回复
                      还是不行,谢谢老哥们的建议,我会一个个的测试一下
                      报错:
                      org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column 'FILENAME' from result set. Cause: java.sql.SQLException: 未执行语句句柄
                      ; uncategorized SQLException for SQL []; SQL state [null]; error code [17144]; 未执行语句句柄; nested exception is java.sql.SQLException: 未执行语句句柄
                      at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
                      at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
                      at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
                      at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
                      at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
                      at com.sun.proxy.$Proxy71.selectList(Unknown Source)


                      IP属地:湖北11楼2018-07-24 17:57
                      回复
                        各位大神,问题解决了


                        IP属地:湖北来自Android客户端12楼2018-07-26 15:55
                        回复
                          不是程序的问题,当一个SQL在数据库中查询时是会消耗服务器资源的,因为耗时太长,占了太多的资源被数据库强制关闭SQL语句


                          IP属地:湖北来自Android客户端13楼2018-07-26 15:59
                          回复
                            为什么SQL查询这么慢,这张表有索引啊,是因为一数据量太大,二他居然没有走那个时间限制的索引,走的是其他的索引,导致全表扫描


                            IP属地:湖北来自Android客户端14楼2018-07-26 16:03
                            回复
                              2026-03-31 05:41:45
                              广告
                              不感兴趣
                              开通SVIP免广告
                              最后加了强制索引,时间减少了很多,从20分钟减少到不到5分钟


                              IP属地:湖北来自Android客户端15楼2018-07-26 16:05
                              回复