急求,JAVA 多线查询ORACLE线程卡住 80C

因实际查询需要,系统设置40个线程进行数据查询,每个线程查询的时间会很长,都需要几十分钟的查询时间,当查询时间运行到一定的时间后,有些线程就卡在statement.executeQuery(),用jvisuallvm查看线程的执行点停留在java.net.SocketInputStream.socketRead0,再查看ORALCE的V$SESSION,这些线程提交的查询都已执行完成了,TOMCAT日志也没有任何异常记录,各位大神帮帮忙,看下问题会出在哪里。

0

6个回答

这个不关oracle底层的事情,并发查询是数据库的最基本功能之一。估计是你用ODBC API方式不对或者你的ODBC不支持数据库的多线程处理。从你的描述来看,串行可以,并行不行,应该是你用的API库不支持多线程并行。

3
shenpingjngs
shenpingjngs 如果查询时间短,是可以全部完成查询的。
大约一年之前 回复

每个线程的数据库连接有没有正确的关闭。

0
shenpingjngs
shenpingjngs 都进行了关闭,如果整个查询的时间不是很长的话,全部线程都成完成查询并汇总数据。
大约一年之前 回复

如果数据量再大点这样解决就会出现IO阻塞 死锁等问题 需要考虑分布式

0
shenpingjngs
shenpingjngs 没有出现死锁,而且每条语句ORACLE后台都执行完成,就是JAVA线程收不到执行的结果。
大约一年之前 回复

1、连接是否正确关闭
2、查询的表是否加了索引
3、可以贴下代码

0

这个现象很像tcp连接已经非正常断掉,确认一下java客户端到oracle中间的网络设备,会不会在socket限制一定时间后主动切断?

客户端的socket连接是ESTABLISHED状态,因为没收到tcp关闭相关的包,但是oracle端尝试输出结果的时候发现链接已经有问题了,用netstat看看客户端和服务端的连接数是不是对的上,对不上就是我说的这种情况了。

0

oracle的会话已经结束,而数据库连接池并没有接收到,有可能是因为odbc设置的最大等待时间比oracle的会话时间短,建议优化sql或修改等待时间尝试

-1
meng20166
乐古 回复shenpingjngs: 是不是你的连接数设的太少导致线程阻塞了呢
大约一年之前 回复
shenpingjngs
shenpingjngs 我用tomcat dbcp连接池,jdbc连接,设置了statement.setquerytimeout 几个小时,如果超时会报异常,但是没有异常日志
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java 多线程 - 线程间的异步回调函数 jdk5开始引入的Future接口
转自:   https://blog.csdn.net/u012129558/article/details/78962759   一. Future  //通常结合线程池类:ExecutorService 的方法  <T> Future<T> submit(Callable<T> task) 一起使用 JDK 5引入了Future模式。Future接口是...
错误笔记:JDBC向oracle数据库中插入数据遇到线程阻塞问题
今天在往数据库中插入数据时遇到了线程阻塞问题:..........
oracle 执行 被卡死处理
-----查询卡死 进程 select object_name as 对象名称,s.sid,s.serial#,p.spid as 系统进程号 from v$locked_object l , dba_objects o , v$session s , v$process p where l.object_id=o.object_id and l.session_id=s.sid and s
oracle使用parallel并行,多线程查询
insert into tmp (select /*parallel (a, 4)*/ * from plsuer.as_cdrindex_info_h partition(P_20170430) where temp = 10143); 这条语句是使用4个线程执行当前sql
java多线程查询
由于最近工作遇到性能问题,尝试研究用多线程来实现,结果速度快了好几倍 下面是多线程查询的部分代码,提供给大家参考下: 线程类: 带返回值的类要实现Callable接口,具体业务逻辑没有实现,只是写了个空方法在里面 package com.sanfy.demo.thread; import java.util.List; import java.util.Map; import jav
一例JAVA多线程访问卡死的现象
  最近适配摄像头,自然的就要接收、传递音频视频数据。而这些数据是非常频繁的,如果每次都新建缓冲区,一个是影响性能,另外也显得自己水平太低。怎么办?上缓存。   音频、视频当然要分开缓存。代码很类似,自然的吾就新建了一个类,   起名?Manager显然不合适,叫Worker最好。Queue、Cache都不是太适合。   数据队列LinkedBlockingDeque,缓存用Concurre...
Oracle死进程查询及解决
--查询代码 SELECT'alter system kill session '''|| c.sid ||''||','|| c.serial# ||''';',        a.object_id, a.session_id, b.object_name, c.*   FROM v$locked_object a, dba_objects b, v$session c  WHERE
Java多线程之进阶篇(二)
接下来,我们继续学习Java多线程之进阶篇。Java多线程之进阶篇(一)介绍了线程池的相关内容,让我们大致对线程池有了初步的整体的认识,但是具体到稍微深入的知识点还是有点懵,这一篇主要介绍JUC的原子类。 在Java SE5 中java.util.concurrent.atomic包下提供了一系列支持无锁线程安全修改操作的基础变量。这些原子类是对volatile机制的扩展,并提供下面形式的原子性...
mybatis查询卡住
即使只有几条数据,select count(*) from tablename 也会卡住 错误原因有可能是在mybatis里面配置了log4j,但是配置有问题,注释掉就可以了,心累的一天,希望可以帮助到别人 ...
Java多线程--CAS原理
一、锁实现线程同步最直观的策略便是加锁,如使用synchronized关键字进行加锁实现线程同步最直观的策略便是加锁,如使用synchronized关键字进行加锁。悲观锁:悲观锁在对一个对象进行操作是悲观的认为这个对象会被修改,因此悲观锁在一个线程进行加锁后使得该对象变为该线程的独享对象,此时任何其他的线程都会被悲观锁阻拦在外,无法进行操作。显然悲观锁带来的开销是巨大的,悲观锁存在以下几点缺陷:1...
xml 查询问题
xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急xml 查询问题 急
Java多线程-51-两个线程之间的通信
这篇来学习Object类下两个方法,分别是wait()和notify(), 这两个方法是在多线程中设置线程等待和唤醒线程的作用。这篇,通过两个线程的例子来学习wait()线程等待方法和notify()唤醒线程方法。 1.两个线程,打印两句话。 前面文章,有类似下面的代码,两个线程随机打印两句话。 package thread; public class Notify_Demo { p...
java实现【有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABC.】
该题应属于生产者消费者模式一类   生产者消费者模式:根据标志位来发消息,实现对线程的控制。   直接贴答案了,请各位大虾们指正哦。   创建三个线程 如下:ThreadA、ThreadB、ThreadC   public class ThreadA implements Runnable {  Printer printer;  ThreadA(Printer printer
java线程实例,赛跑小游戏
利用java线程开发的一个赛跑小游戏,供初学者学习参考使用。
java多线程之线程间通信
1.多线程之等待与通知机制   1.1什么是等待通知机制?     在生活中,如我们去饭店,服务员拿菜单给我们点菜,然后记录完告诉厨房去做,然后服务员就处于等待状态了。然后厨师把菜做好,就通知服务员把菜端上去。然后服务员被通知之后,就处于被唤醒,然后把菜端过去,这就是一个等待通知的过程。    1.2等待通知机制的实现      1.2.1.等待:      .在调用wait之前,线程必
多线程连接数据库查询数据
package Dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner; import ...
Java 多线程间通信及线程安全
  多线程间通信的意义       java中使用多线程操作同一数据时,需要考虑到线程间的通讯,否则会出现数据错误,程序死锁卡死的情况。所以多线程在操作同一数据时必须考虑其先后顺序以保证数据准确,且不会出现死锁的情况。多线程间的通信往往是通过等待机制来实现的,等待某一线程执行完毕或者放弃内存后,再启动另一线程。常使用的两种方法:synchronized和线程锁Lock。   synchr...
基于JAVA线程池读取单个SQL数据库表
任务:基于线程池来操作MySQL,测试单台机器读写MySQL单表的效率。 思路:创建一个大小合适的线程池,让每个线程分别连接到数据库并进行读取输出操作。 主要分为以下步骤: 连接MySQL数据库: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExc
Java多线程之进阶篇(一)
在学习完Java多线程之基础篇(一)和Java多线程之基础篇(二)后接下来开始学习Java多线程之进阶篇的内容。 Java 5 添加了一个新的包到Java平台,这个包是java.util.concurrent包(简称JUC)。这个包包含了有一系列能够让Java的并发编程更加轻松的类。本文使用的Java 7 版本的JUC,下面让我们继续来学习吧! 一、JUC中实现多线程的两种方式 1.1 使用...
java多线程之callable+Executor线程池实例
package main.java; import java.sql.Time; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.Cancell
【笔记】多线程操作Oracle数据库的一个BUG
在Windows下实现多线程,若在子线程和主线程中都要操作同一个数据库,需要添加锁。 实现锁的方式主要有以下四种:临界区、互斥量、信号量和事件。它们之间的区别和联系详情可参考 《秒杀多线程系列》http://blog.csdn.net/morewindows/article/details/7445233 本项目中有一个连接数据库的类:TOracle,在里面声明了一个静态私有成员
Java多线程volatile详解
volatile定义Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。如果一个字段被声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的。volatile的作用先让我们说说volatile关键字的作用。它在多处理器开发中保证了共享变量的“可见性
Java Web 图书管理系统
java web图书管理系统。JSP课程设计论文。Java web图书管理系统论文。
Java多线程—Java13个原子类操作类介绍及使用
Java多线程-Java13个原子类操作类介绍及使用 原子更新基本类型类: 使用原子的方式更新基本类型,Atomic包提供了以下3个类。 AtomicBoolean:原子更新布尔类型。 AtomicInteger:原子更新整型。 AtomicLong:原子更新长整型。 AtomicInteger常用方法如下: int addAndGet(int delta):以原子方式将输入的数值与实...
【Java多线程】——通过管道进行线程间通信
    在Java中提供了各种各样的输入输出流stream,我们可以用他们对数据进行方便的操作。其中,管道(pipeStream)是一种特殊的流,它可以用于在不同的线程之间传送数据。一个线程将数据输出到管道中,另一个线程从管道中读取需要的数据,实现不同线程之间的通信而无需通过临时文件。管道通信可以达到解耦的目的,产生数据的线程不需要直接调用处理数据的方法并等待返回结果,只需要将数据放入管道,接着继...
ORACLE用ORDERED提示改变SQL执行计划 【转】,解决Oracle查询卡死问题,优化查询语句。...
     之前在公司开发内部信息化系统,碰到了一个很悲剧事情。项目在测试环境运行没问题,上到正式环境,访问就卡住不动了。检查才发现那条查询的SQL的问题。因为一条SQL涉及了十几张表,left join的,inner join的,多表查询的,各种关联交杂在一起,整条SQL语句二三十行,放到plsql里面整整一页。可能由于这种关联性的东西太多,导致数据库执行查询的时候出现卡死的情况。测试环境的数...
java web 图书管理系统
比较好的学习项目,实现图书管理系统相关功能
java多线程模式之Thread-per-Message模式
Thread-per-Message模式(这项工作就交给你了)当你很忙碌的时候,这个时候公司楼下有个快递,于是你委托你的同事帮你拿一下你的快递,这样你就可以继续做自己的工作了在Thread-Per-Message模式中,消息的委托端和执行端是不同的线程,消息的委托端会告诉执行端线程,这个工作就交给你了 下面来看一段实例代码:  Host类:针对请求创建线程的类,主要通过开启新的线程,调用helpe...
java线程学习(八):多线程高级使用之线程池的使用(非常推荐,涉及:ThreadPoolExecutor,Executors,ThreadPoolExecutor,ScheduledThreadP)
前言: 通过前面几篇文章的学习,对多线程的知识了解了很多,同时也明白,其实学习不仅仅要看书,看文章,还要自己动手去敲demo,顺便写点文章收获更多。当然多线程如果仅仅是用前面几篇的知识的话,那未免也太肤浅了,毕竟,线程如果频繁开启和关闭的话,对系统资源的消耗那是相当大的。所以,从本篇文章起,我们开启对线程的更高一级的学习,那就是使用线程池去管理线程的使用。 线程池的学习,主要还是学习JDK提供...
java多线程的(hello world)
public class MyThreadApp implements Runnable {    // produce    // consume    Thread produce = null;    Thread consume = null;    public void run() {        while (true) {            say();        }  
java多线程-Lock(八)
java多线程-Lock(八) 多线程使用synchronized来保持线程之间同步互斥,jdk1.5中加入了Lock对象也能实现同步效果 ReentrantLock(rɪ’entrənt)类的使用 ReentrantReadWriteLock类的使用 ReentrantLock java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象...
java解决swing单线程卡死
现在我们要做一个简单的界面。 包括一个进度条、一个输入框、开始和停止按钮。 需要实现的功能是: 当点击开始按钮,则更新进度条,并且在输入框内把完成的百分比输出(这里只做例子,没有真正去做某个工作)。 代码1: view plaincopy to clipboardprint? 1. import java.awt.FlowLayout;   2. import java.aw
【多线程】线程调度
1、调整线程优先级:Java线程有优先级,优先级高的线程会获得较多的运行机会。Java线程的优先级用整数表示,取值范围是1~10,Thread类有以下三个静态常量:static int MAX_PRIORITY          线程可以具有的最高优先级,取值为10。static int MIN_PRIORITY          线程可以具有的最低优先级,取值为1。static int NORM...
mysql多线程查询处理.
mysql多线程问题 mysql多线程处理不好,经常会发生coredump 单线程 一般情况下,单线程连接mysql代码如下: /* single_thread_mysql_client.cpp */ #include #include #include #include #in
java多线程间的通信实例
----线程间的通信 public class ListAdd1 { private volatile static List list = new ArrayList(); public void add(){ list.add("bjsxt"); } public int size(){ return list.size(); } public ...
java多线程之单例模式和其DCL问题
    首先在说明单例设计模式中的DCL问题之前我们首先看看实现单例设计模式的两种方式:饿汉式和懒汉式。     什么是饿汉式?     饿汉式就是不管你是否用的上,一开始就先初始化对象(也叫做提前初始化) 代码示例:   public class EagerInitialization{ private EagerInitialization() {} private...
又一次Java线程卡死的调试经历
我的java代码,每天凌晨1点都会执行一个定时任务,定时任务中有循环执行的任务,每次循环都有开始和结束日志,某一天,我忽然发现,日志中前一天的循环只执行了几次就停止了,根据日志来看,执行到第4次循环的时候,只有开始的日志,没有结束的日志,那肯定是在里面卡死了 我首先执行 # ps -ef | grep tomcat 获取到了线程的pid 然后执行jstack # jstack -l  1
java多线程学习(三)——线程栈
一、线程栈模型 线程栈模型是理解线程调度原理以及线程执行过程的基础。线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶,线程栈的内容是随着线程的运行状态变化而变化的,研究线程栈必须选择一个运行的时刻(指代码运行到什么地方) 上图中的栈A是主线程main的运行栈信息,当执行new JavaThreadDemo().threadMethod();方法时,threadMet
有三个线程ID分别是A、B、C,请有多线编程 实现 在屏幕上循环打印10次ABCABC......
有三个线程ID分别是A、B、C,请有多线编程 实现 在屏幕上循环打印10次ABCABC...... 代码如下: package thread1; public class Main_thread1 implements Runnable{ private String name; private Object prev; private Objec
Java多线程24:使线程具有有序性
正常的情况下,线程的运行时多个线程之间执行任务的时机是无序的。可以通过改造代码的方式使他们运行具有有序性。 代码如下: package unit7; public class Demo10_Run { public static void main(String[] args) { Object lock = new Object(); Demo10_MyThread a = ne...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java线程学习笔记 java的线程学习