因为某些原因,某个表数据过大,但是又因为数据库是在线的,现在希望把这个表移动出去,但是又不能影响当前的性能,有什么好办法吗?
表的信息:
rows reserved data index_size unused
123710747 104723856 KB 57372872 KB 47338768 KB 12216 KB
写个小程序,1秒钟移动一条数据,这样就不会卡了
我现在以每次10条数据的方式移动数据到mongodb,但是非常慢!因为这个数据库还服务于其他服务!所以I/O和性能也会被其他服务损耗...
@沈融兴: 你可以在凌晨用户少的时间段来移动数据,这样影响就会小了
@刘宏玺: 原系统中凌晨有大量job,所以临晨的负载也挺大
@沈融兴: 那就只能慢慢移动了,这个还是可以实现的,或者你写一个监测操作系统性能的程序,操作系统空闲了就开始移动数据库,不空闲就停止,慢慢的也就移动好了!
@刘宏玺: 其实我挺着急这些数据要导出来的,因为这些数据要用的,现在临时关闭了某个功能....
建张一模一样的表 把当前的表名字改掉
这事我早做了,我现在要将这张表移动到其他物理机~
数据库在线,也可以使用备份功能把?备份-还原-转移,可以不?
这不算大, 我刚处理了一个2亿多的数据表。
1. 你的表结构,最好有自增的主键,聚集 , 移动条件根据判断min id, 和max id 来操作。 PS:只要不是字符型就行,否则是全表扫描了,不慢才怪。
2. 时间不要在高峰, 一次移太多、或者查询要移动的条件太多都会影响性能。
3. 如果涉及表事务, 需要考虑锁表。
4. 别写其它小程序, 用sql语句,挂sql作业做, 远程sql服务器的话就建链接服务器。 这样要比其它程序性能更好。
5. 这么点数据都hold不住, 还谦影响性能, 升级服务器、 做负载均衡等, 再不行就把你换了, 哈哈。
的确,这个数据量不大,大量存储于索引上,如果导数这个不需要的,数据只剩下9.5G左右...这个量如果用SSIS导数的,预计十分钟左右...机器性能要很烂...顶多不会超过过二十分钟
数据表已经不写了,备份还原不行么?