You are probably using page-level locking - which is the default. A couple of questions are - how big are the rows you are looking at (calculate how many rows are on each page) and how ofter are you running onstat -p ? Depending on the number of rows you may want to incorporate row-level locking - but that means you will have to increase the number of locks. What about deadlocks - how many are showing ? Also, how many lokwaits are showing between time intervals - versus how many transactions for your instance ? You can reset the counters by using onstat -z. If possible, it may be helpful for you to post the onstat -p and onstat -k outputs.
To create a table with row level locking:
CREATE TABLE table_name
{
declarations ...
)
LOCK MODE ROW
or for an existing table use:
ALTER TABLE table_name LOCK MODE (ROW)