The idea behind PK is that they are unique by design. Using a 64 bit random number is not unique by design - so you have to prepare your code for PK collision, then randomizing a new id, and submit the new row again to the database. It can be quite a hassle. Having writers inserting new data in concurrency will eventually make these problem even worse.
The database can generate unique ids nicely - after all, the PK problem is pretty standard stuff, and there are good standard solutions for that.
The ID generator itself is a bottleneck - since it has to ensure uniqueness even if it is called from multiple sessions in parallel. For example, Oracle has sequence generators, which pre-generate and "cache" upcoming numbers per session, this way addressing the concurrency issue.
One important thing we can learn from Mr.Tom Kyte: measure your use case using realistic data in the tables and realistic load. This is the only source of true wisdom :)
My two cents: database engines differ a lot! Sharing what database you're using helps getting better answers.