How can I display sticky posts at first in wp_query?

It is not entirely clear what you are trying to do but sticky posts should be at the top– that is, the first posts displayed– already unless you have made an effort to prevent that. That is the default. I just tested this with your query, changing only the category ID to something that exists on my server.

To prevent this sticky post juggling– that is to cause the opposite behavior– you can pass a parameter to WP_Query like :

$my_query = new WP_Query('category_name=animals&showposts=10&ignore_sticky_posts=true');

Or set the value before the query runs with:

$my_query->set('ignore_sticky_posts',true); // $my_query could be any instantiated WP_Query variable.

Perhaps search your theme and plugins for ignore_sticky_posts and see if something is messing with the query.

You could also try to force the sticky posts juggling with:

function force_sticky_wpse_98187($qry) {
  $qry->set('ignore_sticky_posts',false);
}
add_action('pre_get_posts','force_sticky_wpse_98187',1000);

That adds a filter with an arbitrarily high priority so that it should reasonably run as the last action on that hook. I do not know if it works. It is completely untested. That also changes (if it works) all queries, which is probably too aggressive. You would want to add additional conditions to restrict when it runs.