Likely to be a significant slowdown, is the SQL abstraction done by SQL::Abstract. By including this in the loop, you make SQL::Abstract work once for each record.
The solution would be to get back to basics by writing the SQL yourself.
$db->query("UPDATE myTable SET va = ?, vb = ? WHERE vc = ?", $val1, $v
By the way, you should not call your DBIx::Simple $dbh. This is the common name for DBI objects, and objects of classes that inherit from DBI. Using the name $dbh for DBIx::Simple objects is kind of confusing. I suggest calling it $db instead.