Like others have pointed out - this is a database issue, not a perl issue.
You need to look at the query plan generated for the delete and each of the select statements to ensure that these are as optimal as possible.
Then you may need to look at the server itself to see if you can tune the User Log Cache, and maybe bind a specific named cache to the database's log using 4k IO (i.e. two pages) as this can improve things as well. You also need to look at the actual disk IO subsystem to ensure that this is properly configured.