Can you provide output of /etc/my.cnf?
How much RAM do you have on DB server?
Are you able to share table structure info?
>innodb_flush_method=O_DIRECT
Are you using innodb_file_per_table? using O_DIRECT will reduce double-buffering (OS and MySQL caches), however it serializes writes on to each file conceivably reducing writes / second. The effect is less with innodb_file_per_table as the writes are more spread out but it depends on what is getting written to and how frequently.
>innodb_buffer_pool_size=1024M
>The DB is over 350GB and the biggest table which stores documents is over 150GB long.
Can you provide us output of this:
SHOW GLOBAL STATUS LIKE 'Innodb_%';
Perhaps your Innodb buffer isn't sized properly!
http://mysqlopt.blogspot.com/2012/01/mysql-server-tuning.html