JAVA 读取 6 个文件,一共 16w 行,插入 oracle 数据库,不用考虑重复,每条记录有两个字段是外键。 现在起了 6 个线程读 6 个文件分别处理,耗时 7 秒左右。 感觉瓶颈在磁盘 io ,多线程也没啥效果,请问还有什么优化方案?
JAVA 读取 6 个文件,一共 16w 行,插入 oracle 数据库,不用考虑重复,每条记录有两个字段是外键。 现在起了 6 个线程读 6 个文件分别处理,耗时 7 秒左右。 感觉瓶颈在磁盘 io ,多线程也没啥效果,请问还有什么优化方案?
|
wuhang89Sep 19, 2016
1
你怎么优化算法都没有 raid0 外加固态硬盘效果明显,建议更换硬件。
|
|
tjxjjSep 19, 2016
2
干嘛用 java...sqlload 啊
|
|
huskySep 19, 2016
3
文件大吗?试试放到 /dev/shm 下
|
|
clinoSep 19, 2016
4
确定瓶颈在磁盘 IO? 是说读文件慢还是写到数据库慢?
|
|
5
|
|
skydiverSep 19, 2016
6
多线程比单线程还慢是正常的……
|
|
skydiverSep 19, 2016
7
并发插入还不如顺序插入快
|
|
skydiverSep 19, 2016
8
而且一共就几秒,优化个啥劲儿……要是耗时几小时还值得优化……
|
|
10
每行 1KB 算一共 100 多 M , 7 秒读取完毕算是到了 IO 瓶颈了吧。
|
|
sylecnSep 19, 2016
11
@skydiver 就是就是。除非你还有很多个这样的文件,或者你是闲得慌的 DBA ,不然秒级别的导入根本不需要优化。
同意上面多线程可能更慢的说法。 另外性能调优不要看感觉。 CPU ,内存, IO 这些都有工具可以测量他们的实际负载情况 (top, vmstat, iostat)。 |
|
otakustaySep 19, 2016
12
要不试试把外键删了能快多少?
|
|
romisanicSep 19, 2016
13
怎么感觉都不像是到了 io 的瓶颈啊
确定程序没有优化空间了? |
|
ytmsdySep 22, 2016
14
如果够豪,数据库服务器上 ssd ,多快好省。
如果闲工夫比较多,那么试试看把外键去掉,然后再试试看。看看 cpu 数据在导入的时候的使用率,看看内存看是不是一次性把数据加载到内存里面了。最后再看看 IO,其实我觉得 IO 问题是最好解决的,直接上 ssd 就好了 |