Scott Baker wrote:

Is there a way to tell mysqld to stop running a query if it hasn't completed in over 60 seconds? Or how about stop running if the result is greater 100,000 rows or something? I have a bone head user who keeps querying two tables and NOT joining them, and then dragging the DB server down while it crunches this useless query.

How can I prevent this?

Scott

First some questions:
How is the user connecting: Using a mysql client, a web interface or a custom program?
Who controls the machine they are accessing it from?
Do they have a dedicated unique database user?
Does the user issue thousands scripted of querys per day or just a dozen manually?
Do their queries contain inserts or updates?
Who controls the database structure?
Does anyone fully understand the database structure?
Do you have a servers in a replication chain or could you set up a replication chain? Can you influence their behavior without a technological fix? Does their incompetance merit other forms of action?
Just how much cash,  hassle and time is a solution worth to you?


The answers of course influence what is possible. I'd say that if the user is an experienced programmer or DBA you've simply hired the wrong guy. Assuming not and that you need a technical solution it's likely to be one of these (in order of increasing effort):

Give the user a quick person-to-person refresher course in the use of entity models, explain and indexes

If they're connecting via the mysql client form a box you control look at the --I-am-a-dummy, --select_limit= --join_limit= options and consider allowing the person only to be able to invoke the mysql client in that form. In *nix this is easy to achieve. Perhaps you should force them to switch to working this way until they can be trusted if they currently access using a different client.

If their queries are infrequent, read only, can stand a small delay and you've spare hardware consider setting up a replicant reporting server. Deny the user access to the master server and let them slow the reporting server to their hearts content.

If it's a web interface you control and your programming skills allow think about modying the code to apply a similar set of restrictions to the users queries. If the feature doesn't already exist in the web interface software and the appication changes needed are beyond your ken a jobbing programmer could be employed to add it inexpensively.

As an expansion of the web interface idea if you understand the data realtionships it's possible for an interface to cross-check and enforce the correct links helping novice users without restricting experienced ones. I've implemented this myself on an MIS project and it works well.

If the user is accessing remotely with a client they control, they're changing data state, you cannot influence their behavior and your pockets are deep. The last resort is to force the users queries through a spoof 'mysql server' which checks each query with explain before applying it. They have no access to the actual server only through the proxy. Whilst I've never done this but as old the MySQL manual document the protocol it's not impossible to make a validating proxy, just very, very expensive.

Hope part of this this helps

Nigel

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to