When developing a web application for others, multiple environments for testing are a good idea. However, different development teams have different definitions for the meaning
I'd suggest that your staging environment resembles your production environment as closely as possible.
If you use separate servers for the DB and the Web Server, try to keep that in staging as well, if you use a load balancer, try to configure it for staging as well, etc.
In my experience, however, this was not the case, and our staging environment was always less powerful in terms of hardware than the production environment. The problem with this is that you can't test every feature and be sure production will work the same.
As for your other questions: