docs: def transaction_start(self, name):
          """
          start a transaction
  
          this will increment transaction semaphore and pass it to _transaction_start()
          """
          if not name:
              raise ValueError("Transaction name cannot be empty")
              #uid = id(self)
  
          self.transaction_count += 1
          logger.debug("{}. Start transaction {}".format(self.transaction_count, name))
          if self.transaction_count == 1:
              self._transaction_start()
          else:
              self._transaction_started(name)
  
          return self.transaction_count